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

Strict Trs:
  { -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We add the following dependency tuples:

Strict DPs:
  { -^#(@x, @y) -> c_1(#sub^#(@x, @y))
  , sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub#1^#(tuple#2(@b, @_@1)) -> c_12()
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , #abs^#(#neg(@x)) -> c_62()
  , #abs^#(#pos(@x)) -> c_63()
  , #abs^#(#0()) -> c_64()
  , #abs^#(#s(@x)) -> c_65()
  , diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
  , diff#1^#(#false()) -> c_4(#abs^#(#0()))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , mult#3^#(#false(), @b2, @zs) -> c_43()
  , #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
  , div^#(@x, @y) -> c_6(#div^#(@x, @y))
  , bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , +^#(@x, @y) -> c_21(#add^#(@x, @y))
  , *^#(@x, @y) -> c_24(#mult^#(@x, @y))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , sum^#(@x, @y, @r) ->
    c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
  , sum#1^#(@s) ->
    c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
  , mod^#(@x, @y) ->
    c_10(-^#(@x, *(@x, div(@x, @y))),
         *^#(@x, div(@x, @y)),
         div^#(@x, @y))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , #less^#(@x, @y) ->
    c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , #greater^#(@x, @y) ->
    c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , mult#1^#(nil(), @b2) -> c_49()
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
  , sum#2^#(#false(), @s) ->
    c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
         #equal^#(@s, #pos(#s(#0()))))
  , sum#3^#(#true(), @s) ->
    c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
  , sum#3^#(#false(), @s) ->
    c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
         #equal^#(@s, #pos(#s(#s(#0())))))
  , sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
  , sum#4^#(#false()) ->
    c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
  , sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
  , sub'#5^#(#false(), @z, @zs) -> c_26()
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#4^#(tuple#2(@zs, @s), @z) ->
    c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
         #equal^#(@s, #pos(#s(#0()))))
  , sub'#2^#(nil(), @r, @x, @xs) -> c_30()
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , diff^#(@x, @y, @r) ->
    c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
         +^#(+(@x, @y), @r),
         +^#(@x, @y),
         diff#1^#(#less(-(-(@x, @y), @r), #0())),
         #less^#(-(-(@x, @y), @r), #0()),
         -^#(-(@x, @y), @r),
         -^#(@x, @y))
  , compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , compare#3^#(@r, @x, @y) ->
    c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
  , compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
  , compare#5^#(#false(), @x, @y) ->
    c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
  , compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
  , compare#6^#(#false()) -> c_54(#abs^#(#0()))
  , compare#4^#(#true(), @r, @x, @y) ->
    c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
  , compare#4^#(#false(), @r, @x, @y) -> c_56()
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(nil(), @b2, @r) -> c_40()
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(nil(), @b2, @r) -> c_44()
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(nil(), @r, @x, @xs) -> c_46()
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak DPs:
  { #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
  , #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
  , #sub^#(@x, #0()) -> c_122()
  , #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #0()) -> c_138()
  , #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #0()) -> c_141()
  , #div^#(#0(), #neg(@y)) -> c_142()
  , #div^#(#0(), #pos(@y)) -> c_143()
  , #div^#(#0(), #0()) -> c_144()
  , #ckgt^#(#EQ()) -> c_70()
  , #ckgt^#(#LT()) -> c_71()
  , #ckgt^#(#GT()) -> c_72()
  , #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
  , #compare^#(#neg(@x), #pos(@y)) -> c_83()
  , #compare^#(#neg(@x), #0()) -> c_84()
  , #compare^#(#pos(@x), #neg(@y)) -> c_85()
  , #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_87()
  , #compare^#(#0(), #neg(@y)) -> c_88()
  , #compare^#(#0(), #pos(@y)) -> c_89()
  , #compare^#(#0(), #0()) -> c_90()
  , #compare^#(#0(), #s(@y)) -> c_91()
  , #compare^#(#s(@x), #0()) -> c_92()
  , #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
  , #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_77()
  , #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #0()) -> c_125()
  , #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #0()) -> c_128()
  , #mult^#(#0(), #neg(@y)) -> c_129()
  , #mult^#(#0(), #pos(@y)) -> c_130()
  , #mult^#(#0(), #0()) -> c_131()
  , #cklt^#(#EQ()) -> c_117()
  , #cklt^#(#LT()) -> c_118()
  , #cklt^#(#GT()) -> c_119()
  , #eq^#(nil(), nil()) -> c_94()
  , #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
  , #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
  , #eq^#(#neg(@x), #pos(@y)) -> c_98()
  , #eq^#(#neg(@x), #0()) -> c_99()
  , #eq^#(#pos(@x), #neg(@y)) -> c_100()
  , #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_102()
  , #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
  , #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_106()
  , #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #neg(@y)) -> c_109()
  , #eq^#(#0(), #pos(@y)) -> c_110()
  , #eq^#(#0(), #0()) -> c_111()
  , #eq^#(#0(), #s(@y)) -> c_112()
  , #eq^#(#s(@x), #0()) -> c_113()
  , #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
  , #natsub^#(@x, #0()) -> c_66()
  , #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
  , #natdiv^#(#0(), #0()) -> c_68()
  , #natdiv^#(#s(@x), #s(@y)) ->
    c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
  , #pred^#(#neg(#s(@x))) -> c_145()
  , #pred^#(#pos(#s(#0()))) -> c_146()
  , #pred^#(#pos(#s(#s(@x)))) -> c_147()
  , #pred^#(#0()) -> c_148()
  , #succ^#(#neg(#s(#0()))) -> c_132()
  , #succ^#(#neg(#s(#s(@x)))) -> c_133()
  , #succ^#(#pos(#s(@x))) -> c_134()
  , #succ^#(#0()) -> c_135()
  , #and^#(#true(), #true()) -> c_78()
  , #and^#(#true(), #false()) -> c_79()
  , #and^#(#false(), #true()) -> c_80()
  , #and^#(#false(), #false()) -> c_81()
  , #natmult^#(#0(), @y) -> c_115()
  , #natmult^#(#s(@x), @y) ->
    c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }

and mark the set of starting terms.

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

Strict DPs:
  { -^#(@x, @y) -> c_1(#sub^#(@x, @y))
  , sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub#1^#(tuple#2(@b, @_@1)) -> c_12()
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , #abs^#(#neg(@x)) -> c_62()
  , #abs^#(#pos(@x)) -> c_63()
  , #abs^#(#0()) -> c_64()
  , #abs^#(#s(@x)) -> c_65()
  , diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
  , diff#1^#(#false()) -> c_4(#abs^#(#0()))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , mult#3^#(#false(), @b2, @zs) -> c_43()
  , #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
  , div^#(@x, @y) -> c_6(#div^#(@x, @y))
  , bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , +^#(@x, @y) -> c_21(#add^#(@x, @y))
  , *^#(@x, @y) -> c_24(#mult^#(@x, @y))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , sum^#(@x, @y, @r) ->
    c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
  , sum#1^#(@s) ->
    c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
  , mod^#(@x, @y) ->
    c_10(-^#(@x, *(@x, div(@x, @y))),
         *^#(@x, div(@x, @y)),
         div^#(@x, @y))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , #less^#(@x, @y) ->
    c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , #greater^#(@x, @y) ->
    c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , mult#1^#(nil(), @b2) -> c_49()
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
  , sum#2^#(#false(), @s) ->
    c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
         #equal^#(@s, #pos(#s(#0()))))
  , sum#3^#(#true(), @s) ->
    c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
  , sum#3^#(#false(), @s) ->
    c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
         #equal^#(@s, #pos(#s(#s(#0())))))
  , sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
  , sum#4^#(#false()) ->
    c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
  , sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
  , sub'#5^#(#false(), @z, @zs) -> c_26()
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#4^#(tuple#2(@zs, @s), @z) ->
    c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
         #equal^#(@s, #pos(#s(#0()))))
  , sub'#2^#(nil(), @r, @x, @xs) -> c_30()
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , diff^#(@x, @y, @r) ->
    c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
         +^#(+(@x, @y), @r),
         +^#(@x, @y),
         diff#1^#(#less(-(-(@x, @y), @r), #0())),
         #less^#(-(-(@x, @y), @r), #0()),
         -^#(-(@x, @y), @r),
         -^#(@x, @y))
  , compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , compare#3^#(@r, @x, @y) ->
    c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
  , compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
  , compare#5^#(#false(), @x, @y) ->
    c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
  , compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
  , compare#6^#(#false()) -> c_54(#abs^#(#0()))
  , compare#4^#(#true(), @r, @x, @y) ->
    c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
  , compare#4^#(#false(), @r, @x, @y) -> c_56()
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(nil(), @b2, @r) -> c_40()
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(nil(), @b2, @r) -> c_44()
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(nil(), @r, @x, @xs) -> c_46()
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak DPs:
  { #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
  , #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
  , #sub^#(@x, #0()) -> c_122()
  , #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #0()) -> c_138()
  , #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #0()) -> c_141()
  , #div^#(#0(), #neg(@y)) -> c_142()
  , #div^#(#0(), #pos(@y)) -> c_143()
  , #div^#(#0(), #0()) -> c_144()
  , #ckgt^#(#EQ()) -> c_70()
  , #ckgt^#(#LT()) -> c_71()
  , #ckgt^#(#GT()) -> c_72()
  , #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
  , #compare^#(#neg(@x), #pos(@y)) -> c_83()
  , #compare^#(#neg(@x), #0()) -> c_84()
  , #compare^#(#pos(@x), #neg(@y)) -> c_85()
  , #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_87()
  , #compare^#(#0(), #neg(@y)) -> c_88()
  , #compare^#(#0(), #pos(@y)) -> c_89()
  , #compare^#(#0(), #0()) -> c_90()
  , #compare^#(#0(), #s(@y)) -> c_91()
  , #compare^#(#s(@x), #0()) -> c_92()
  , #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
  , #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_77()
  , #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #0()) -> c_125()
  , #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #0()) -> c_128()
  , #mult^#(#0(), #neg(@y)) -> c_129()
  , #mult^#(#0(), #pos(@y)) -> c_130()
  , #mult^#(#0(), #0()) -> c_131()
  , #cklt^#(#EQ()) -> c_117()
  , #cklt^#(#LT()) -> c_118()
  , #cklt^#(#GT()) -> c_119()
  , #eq^#(nil(), nil()) -> c_94()
  , #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
  , #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
  , #eq^#(#neg(@x), #pos(@y)) -> c_98()
  , #eq^#(#neg(@x), #0()) -> c_99()
  , #eq^#(#pos(@x), #neg(@y)) -> c_100()
  , #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_102()
  , #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
  , #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_106()
  , #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #neg(@y)) -> c_109()
  , #eq^#(#0(), #pos(@y)) -> c_110()
  , #eq^#(#0(), #0()) -> c_111()
  , #eq^#(#0(), #s(@y)) -> c_112()
  , #eq^#(#s(@x), #0()) -> c_113()
  , #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
  , #natsub^#(@x, #0()) -> c_66()
  , #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
  , #natdiv^#(#0(), #0()) -> c_68()
  , #natdiv^#(#s(@x), #s(@y)) ->
    c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
  , #pred^#(#neg(#s(@x))) -> c_145()
  , #pred^#(#pos(#s(#0()))) -> c_146()
  , #pred^#(#pos(#s(#s(@x)))) -> c_147()
  , #pred^#(#0()) -> c_148()
  , #succ^#(#neg(#s(#0()))) -> c_132()
  , #succ^#(#neg(#s(#s(@x)))) -> c_133()
  , #succ^#(#pos(#s(@x))) -> c_134()
  , #succ^#(#0()) -> c_135()
  , #and^#(#true(), #true()) -> c_78()
  , #and^#(#true(), #false()) -> c_79()
  , #and^#(#false(), #true()) -> c_80()
  , #and^#(#false(), #false()) -> c_81()
  , #natmult^#(#0(), @y) -> c_115()
  , #natmult^#(#s(@x), @y) ->
    c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of
{1,3,5,6,7,8,13,14,15,18,19,27,29,30,40,43,54,58,60,62} by
applications of
Pre({1,3,5,6,7,8,13,14,15,18,19,27,29,30,40,43,54,58,60,62}) =
{2,4,9,10,11,16,17,21,22,23,25,26,31,32,33,34,35,36,37,38,39,42,45,46,48,49,50,51,52,53,55,56,59,61,64}.
Here rules are labeled as follows:

  DPs:
    { 1: -^#(@x, @y) -> c_1(#sub^#(@x, @y))
    , 2: sub^#(@b1, @b2) ->
         c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
             sub'^#(@b1, @b2, #abs(#0())),
             #abs^#(#0()))
    , 3: sub#1^#(tuple#2(@b, @_@1)) -> c_12()
    , 4: sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
    , 5: #abs^#(#neg(@x)) -> c_62()
    , 6: #abs^#(#pos(@x)) -> c_63()
    , 7: #abs^#(#0()) -> c_64()
    , 8: #abs^#(#s(@x)) -> c_65()
    , 9: diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
    , 10: diff#1^#(#false()) -> c_4(#abs^#(#0()))
    , 11: mult#2^#(@zs, @b2, @x) ->
          c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
              #equal^#(@x, #pos(#s(#0()))))
    , 12: mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
    , 13: mult#3^#(#false(), @b2, @zs) -> c_43()
    , 14: #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
    , 15: div^#(@x, @y) -> c_6(#div^#(@x, @y))
    , 16: bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
    , 17: bitToInt'#1^#(::(@x, @xs), @n) ->
          c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
              *^#(@x, @n),
              bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
              *^#(@n, #pos(#s(#s(#0())))))
    , 18: +^#(@x, @y) -> c_21(#add^#(@x, @y))
    , 19: *^#(@x, @y) -> c_24(#mult^#(@x, @y))
    , 20: bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
    , 21: sum^#(@x, @y, @r) ->
          c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
    , 22: sum#1^#(@s) ->
          c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
    , 23: mod^#(@x, @y) ->
          c_10(-^#(@x, *(@x, div(@x, @y))),
               *^#(@x, div(@x, @y)),
               div^#(@x, @y))
    , 24: mult3^#(@b1, @b2, @b3) ->
          c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
    , 25: mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
    , 26: leq^#(@b1, @b2) ->
          c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
               compare^#(@b1, @b2))
    , 27: #less^#(@x, @y) ->
          c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 28: compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
    , 29: #greater^#(@x, @y) ->
          c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 30: mult#1^#(nil(), @b2) -> c_49()
    , 31: mult#1^#(::(@x, @xs), @b2) ->
          c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               #abs^#(#0()),
               mult^#(@xs, @b2))
    , 32: bitToInt^#(@b) ->
          c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
    , 33: sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
    , 34: sum#2^#(#false(), @s) ->
          c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
               #equal^#(@s, #pos(#s(#0()))))
    , 35: sum#3^#(#true(), @s) ->
          c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
    , 36: sum#3^#(#false(), @s) ->
          c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
               #equal^#(@s, #pos(#s(#s(#0())))))
    , 37: sum#4^#(#true()) ->
          c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
    , 38: sum#4^#(#false()) ->
          c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
    , 39: sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
    , 40: sub'#5^#(#false(), @z, @zs) -> c_26()
    , 41: sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
    , 42: sub'#4^#(tuple#2(@zs, @s), @z) ->
          c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
               #equal^#(@s, #pos(#s(#0()))))
    , 43: sub'#2^#(nil(), @r, @x, @xs) -> c_30()
    , 44: sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
    , 45: diff^#(@x, @y, @r) ->
          c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               +^#(+(@x, @y), @r),
               +^#(@x, @y),
               diff#1^#(#less(-(-(@x, @y), @r), #0())),
               #less^#(-(-(@x, @y), @r), #0()),
               -^#(-(@x, @y), @r),
               -^#(@x, @y))
    , 46: compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
    , 47: compare#2^#(::(@y, @ys), @x, @xs) ->
          c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
    , 48: compare#3^#(@r, @x, @y) ->
          c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
    , 49: compare#5^#(#true(), @x, @y) ->
          c_35(-^#(#0(), #pos(#s(#0()))))
    , 50: compare#5^#(#false(), @x, @y) ->
          c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
    , 51: compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
    , 52: compare#6^#(#false()) -> c_54(#abs^#(#0()))
    , 53: compare#4^#(#true(), @r, @x, @y) ->
          c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
    , 54: compare#4^#(#false(), @r, @x, @y) -> c_56()
    , 55: add^#(@b1, @b2) ->
          c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
    , 56: add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
    , 57: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_39(add'^#(@xs, @ys, @r'))
    , 58: sub'#1^#(nil(), @b2, @r) -> c_40()
    , 59: sub'#1^#(::(@x, @xs), @b2, @r) ->
          c_41(sub'#2^#(@b2, @r, @x, @xs))
    , 60: add'#1^#(nil(), @b2, @r) -> c_44()
    , 61: add'#1^#(::(@x, @xs), @b2, @r) ->
          c_45(add'#2^#(@b2, @r, @x, @xs))
    , 62: add'#2^#(nil(), @r, @x, @xs) -> c_46()
    , 63: add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
    , 64: compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
    , 65: compare#1^#(::(@x, @xs), @b2) ->
          c_61(compare#2^#(@b2, @x, @xs))
    , 66: #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
    , 67: #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
    , 68: #sub^#(@x, #0()) -> c_122()
    , 69: #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
    , 70: #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
    , 71: #div^#(#neg(@x), #0()) -> c_138()
    , 72: #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
    , 73: #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
    , 74: #div^#(#pos(@x), #0()) -> c_141()
    , 75: #div^#(#0(), #neg(@y)) -> c_142()
    , 76: #div^#(#0(), #pos(@y)) -> c_143()
    , 77: #div^#(#0(), #0()) -> c_144()
    , 78: #ckgt^#(#EQ()) -> c_70()
    , 79: #ckgt^#(#LT()) -> c_71()
    , 80: #ckgt^#(#GT()) -> c_72()
    , 81: #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
    , 82: #compare^#(#neg(@x), #pos(@y)) -> c_83()
    , 83: #compare^#(#neg(@x), #0()) -> c_84()
    , 84: #compare^#(#pos(@x), #neg(@y)) -> c_85()
    , 85: #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
    , 86: #compare^#(#pos(@x), #0()) -> c_87()
    , 87: #compare^#(#0(), #neg(@y)) -> c_88()
    , 88: #compare^#(#0(), #pos(@y)) -> c_89()
    , 89: #compare^#(#0(), #0()) -> c_90()
    , 90: #compare^#(#0(), #s(@y)) -> c_91()
    , 91: #compare^#(#s(@x), #0()) -> c_92()
    , 92: #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
    , 93: #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
    , 94: #add^#(#neg(#s(#s(@x))), @y) ->
          c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 95: #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
    , 96: #add^#(#pos(#s(#s(@x))), @y) ->
          c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 97: #add^#(#0(), @y) -> c_77()
    , 98: #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
    , 99: #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
    , 100: #mult^#(#neg(@x), #0()) -> c_125()
    , 101: #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
    , 102: #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
    , 103: #mult^#(#pos(@x), #0()) -> c_128()
    , 104: #mult^#(#0(), #neg(@y)) -> c_129()
    , 105: #mult^#(#0(), #pos(@y)) -> c_130()
    , 106: #mult^#(#0(), #0()) -> c_131()
    , 107: #cklt^#(#EQ()) -> c_117()
    , 108: #cklt^#(#LT()) -> c_118()
    , 109: #cklt^#(#GT()) -> c_119()
    , 110: #eq^#(nil(), nil()) -> c_94()
    , 111: #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
    , 112: #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
    , 113: #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
    , 114: #eq^#(#neg(@x), #pos(@y)) -> c_98()
    , 115: #eq^#(#neg(@x), #0()) -> c_99()
    , 116: #eq^#(#pos(@x), #neg(@y)) -> c_100()
    , 117: #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
    , 118: #eq^#(#pos(@x), #0()) -> c_102()
    , 119: #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
    , 120: #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
           c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 121: #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
    , 122: #eq^#(::(@x_1, @x_2), nil()) -> c_106()
    , 123: #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
    , 124: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
           c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 125: #eq^#(#0(), #neg(@y)) -> c_109()
    , 126: #eq^#(#0(), #pos(@y)) -> c_110()
    , 127: #eq^#(#0(), #0()) -> c_111()
    , 128: #eq^#(#0(), #s(@y)) -> c_112()
    , 129: #eq^#(#s(@x), #0()) -> c_113()
    , 130: #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
    , 131: #natsub^#(@x, #0()) -> c_66()
    , 132: #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
    , 133: #natdiv^#(#0(), #0()) -> c_68()
    , 134: #natdiv^#(#s(@x), #s(@y)) ->
           c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
    , 135: #pred^#(#neg(#s(@x))) -> c_145()
    , 136: #pred^#(#pos(#s(#0()))) -> c_146()
    , 137: #pred^#(#pos(#s(#s(@x)))) -> c_147()
    , 138: #pred^#(#0()) -> c_148()
    , 139: #succ^#(#neg(#s(#0()))) -> c_132()
    , 140: #succ^#(#neg(#s(#s(@x)))) -> c_133()
    , 141: #succ^#(#pos(#s(@x))) -> c_134()
    , 142: #succ^#(#0()) -> c_135()
    , 143: #and^#(#true(), #true()) -> c_78()
    , 144: #and^#(#true(), #false()) -> c_79()
    , 145: #and^#(#false(), #true()) -> c_80()
    , 146: #and^#(#false(), #false()) -> c_81()
    , 147: #natmult^#(#0(), @y) -> c_115()
    , 148: #natmult^#(#s(@x), @y) ->
           c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }

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

Strict DPs:
  { sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
  , diff#1^#(#false()) -> c_4(#abs^#(#0()))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , sum^#(@x, @y, @r) ->
    c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
  , sum#1^#(@s) ->
    c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
  , mod^#(@x, @y) ->
    c_10(-^#(@x, *(@x, div(@x, @y))),
         *^#(@x, div(@x, @y)),
         div^#(@x, @y))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
  , sum#2^#(#false(), @s) ->
    c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
         #equal^#(@s, #pos(#s(#0()))))
  , sum#3^#(#true(), @s) ->
    c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
  , sum#3^#(#false(), @s) ->
    c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
         #equal^#(@s, #pos(#s(#s(#0())))))
  , sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
  , sum#4^#(#false()) ->
    c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
  , sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#4^#(tuple#2(@zs, @s), @z) ->
    c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
         #equal^#(@s, #pos(#s(#0()))))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , diff^#(@x, @y, @r) ->
    c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
         +^#(+(@x, @y), @r),
         +^#(@x, @y),
         diff#1^#(#less(-(-(@x, @y), @r), #0())),
         #less^#(-(-(@x, @y), @r), #0()),
         -^#(-(@x, @y), @r),
         -^#(@x, @y))
  , compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , compare#3^#(@r, @x, @y) ->
    c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
  , compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
  , compare#5^#(#false(), @x, @y) ->
    c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
  , compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
  , compare#6^#(#false()) -> c_54(#abs^#(#0()))
  , compare#4^#(#true(), @r, @x, @y) ->
    c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak DPs:
  { -^#(@x, @y) -> c_1(#sub^#(@x, @y))
  , #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
  , #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
  , #sub^#(@x, #0()) -> c_122()
  , sub#1^#(tuple#2(@b, @_@1)) -> c_12()
  , #abs^#(#neg(@x)) -> c_62()
  , #abs^#(#pos(@x)) -> c_63()
  , #abs^#(#0()) -> c_64()
  , #abs^#(#s(@x)) -> c_65()
  , mult#3^#(#false(), @b2, @zs) -> c_43()
  , #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
  , div^#(@x, @y) -> c_6(#div^#(@x, @y))
  , #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #0()) -> c_138()
  , #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #0()) -> c_141()
  , #div^#(#0(), #neg(@y)) -> c_142()
  , #div^#(#0(), #pos(@y)) -> c_143()
  , #div^#(#0(), #0()) -> c_144()
  , +^#(@x, @y) -> c_21(#add^#(@x, @y))
  , *^#(@x, @y) -> c_24(#mult^#(@x, @y))
  , #less^#(@x, @y) ->
    c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #greater^#(@x, @y) ->
    c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_70()
  , #ckgt^#(#LT()) -> c_71()
  , #ckgt^#(#GT()) -> c_72()
  , #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
  , #compare^#(#neg(@x), #pos(@y)) -> c_83()
  , #compare^#(#neg(@x), #0()) -> c_84()
  , #compare^#(#pos(@x), #neg(@y)) -> c_85()
  , #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_87()
  , #compare^#(#0(), #neg(@y)) -> c_88()
  , #compare^#(#0(), #pos(@y)) -> c_89()
  , #compare^#(#0(), #0()) -> c_90()
  , #compare^#(#0(), #s(@y)) -> c_91()
  , #compare^#(#s(@x), #0()) -> c_92()
  , #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
  , mult#1^#(nil(), @b2) -> c_49()
  , #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_77()
  , #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #0()) -> c_125()
  , #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #0()) -> c_128()
  , #mult^#(#0(), #neg(@y)) -> c_129()
  , #mult^#(#0(), #pos(@y)) -> c_130()
  , #mult^#(#0(), #0()) -> c_131()
  , sub'#5^#(#false(), @z, @zs) -> c_26()
  , #cklt^#(#EQ()) -> c_117()
  , #cklt^#(#LT()) -> c_118()
  , #cklt^#(#GT()) -> c_119()
  , #eq^#(nil(), nil()) -> c_94()
  , #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
  , #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
  , #eq^#(#neg(@x), #pos(@y)) -> c_98()
  , #eq^#(#neg(@x), #0()) -> c_99()
  , #eq^#(#pos(@x), #neg(@y)) -> c_100()
  , #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_102()
  , #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
  , #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_106()
  , #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #neg(@y)) -> c_109()
  , #eq^#(#0(), #pos(@y)) -> c_110()
  , #eq^#(#0(), #0()) -> c_111()
  , #eq^#(#0(), #s(@y)) -> c_112()
  , #eq^#(#s(@x), #0()) -> c_113()
  , #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
  , sub'#2^#(nil(), @r, @x, @xs) -> c_30()
  , compare#4^#(#false(), @r, @x, @y) -> c_56()
  , sub'#1^#(nil(), @b2, @r) -> c_40()
  , add'#1^#(nil(), @b2, @r) -> c_44()
  , add'#2^#(nil(), @r, @x, @xs) -> c_46()
  , #natsub^#(@x, #0()) -> c_66()
  , #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
  , #natdiv^#(#0(), #0()) -> c_68()
  , #natdiv^#(#s(@x), #s(@y)) ->
    c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
  , #pred^#(#neg(#s(@x))) -> c_145()
  , #pred^#(#pos(#s(#0()))) -> c_146()
  , #pred^#(#pos(#s(#s(@x)))) -> c_147()
  , #pred^#(#0()) -> c_148()
  , #succ^#(#neg(#s(#0()))) -> c_132()
  , #succ^#(#neg(#s(#s(@x)))) -> c_133()
  , #succ^#(#pos(#s(@x))) -> c_134()
  , #succ^#(#0()) -> c_135()
  , #and^#(#true(), #true()) -> c_78()
  , #and^#(#true(), #false()) -> c_79()
  , #and^#(#false(), #true()) -> c_80()
  , #and^#(#false(), #false()) -> c_81()
  , #natmult^#(#0(), @y) -> c_115()
  , #natmult^#(#s(@x), @y) ->
    c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of
{3,4,7,12,19,21,23,24,25,30,33,35,36,44} by applications of
Pre({3,4,7,12,19,21,23,24,25,30,33,35,36,44}) =
{9,11,16,20,22,27,29,34,37,45}. Here rules are labeled as follows:

  DPs:
    { 1: sub^#(@b1, @b2) ->
         c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
             sub'^#(@b1, @b2, #abs(#0())),
             #abs^#(#0()))
    , 2: sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
    , 3: diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
    , 4: diff#1^#(#false()) -> c_4(#abs^#(#0()))
    , 5: mult#2^#(@zs, @b2, @x) ->
         c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
             #equal^#(@x, #pos(#s(#0()))))
    , 6: mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
    , 7: bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
    , 8: bitToInt'#1^#(::(@x, @xs), @n) ->
         c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
             *^#(@x, @n),
             bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
             *^#(@n, #pos(#s(#s(#0())))))
    , 9: bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
    , 10: sum^#(@x, @y, @r) ->
          c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
    , 11: sum#1^#(@s) ->
          c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
    , 12: mod^#(@x, @y) ->
          c_10(-^#(@x, *(@x, div(@x, @y))),
               *^#(@x, div(@x, @y)),
               div^#(@x, @y))
    , 13: mult3^#(@b1, @b2, @b3) ->
          c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
    , 14: mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
    , 15: leq^#(@b1, @b2) ->
          c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
               compare^#(@b1, @b2))
    , 16: compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
    , 17: mult#1^#(::(@x, @xs), @b2) ->
          c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               #abs^#(#0()),
               mult^#(@xs, @b2))
    , 18: bitToInt^#(@b) ->
          c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
    , 19: sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
    , 20: sum#2^#(#false(), @s) ->
          c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
               #equal^#(@s, #pos(#s(#0()))))
    , 21: sum#3^#(#true(), @s) ->
          c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
    , 22: sum#3^#(#false(), @s) ->
          c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
               #equal^#(@s, #pos(#s(#s(#0())))))
    , 23: sum#4^#(#true()) ->
          c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
    , 24: sum#4^#(#false()) ->
          c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
    , 25: sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
    , 26: sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
    , 27: sub'#4^#(tuple#2(@zs, @s), @z) ->
          c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
               #equal^#(@s, #pos(#s(#0()))))
    , 28: sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
    , 29: diff^#(@x, @y, @r) ->
          c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               +^#(+(@x, @y), @r),
               +^#(@x, @y),
               diff#1^#(#less(-(-(@x, @y), @r), #0())),
               #less^#(-(-(@x, @y), @r), #0()),
               -^#(-(@x, @y), @r),
               -^#(@x, @y))
    , 30: compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
    , 31: compare#2^#(::(@y, @ys), @x, @xs) ->
          c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
    , 32: compare#3^#(@r, @x, @y) ->
          c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
    , 33: compare#5^#(#true(), @x, @y) ->
          c_35(-^#(#0(), #pos(#s(#0()))))
    , 34: compare#5^#(#false(), @x, @y) ->
          c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
    , 35: compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
    , 36: compare#6^#(#false()) -> c_54(#abs^#(#0()))
    , 37: compare#4^#(#true(), @r, @x, @y) ->
          c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
    , 38: add^#(@b1, @b2) ->
          c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
    , 39: add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
    , 40: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_39(add'^#(@xs, @ys, @r'))
    , 41: sub'#1^#(::(@x, @xs), @b2, @r) ->
          c_41(sub'#2^#(@b2, @r, @x, @xs))
    , 42: add'#1^#(::(@x, @xs), @b2, @r) ->
          c_45(add'#2^#(@b2, @r, @x, @xs))
    , 43: add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
    , 44: compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
    , 45: compare#1^#(::(@x, @xs), @b2) ->
          c_61(compare#2^#(@b2, @x, @xs))
    , 46: -^#(@x, @y) -> c_1(#sub^#(@x, @y))
    , 47: #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
    , 48: #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
    , 49: #sub^#(@x, #0()) -> c_122()
    , 50: sub#1^#(tuple#2(@b, @_@1)) -> c_12()
    , 51: #abs^#(#neg(@x)) -> c_62()
    , 52: #abs^#(#pos(@x)) -> c_63()
    , 53: #abs^#(#0()) -> c_64()
    , 54: #abs^#(#s(@x)) -> c_65()
    , 55: mult#3^#(#false(), @b2, @zs) -> c_43()
    , 56: #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
    , 57: div^#(@x, @y) -> c_6(#div^#(@x, @y))
    , 58: #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
    , 59: #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
    , 60: #div^#(#neg(@x), #0()) -> c_138()
    , 61: #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
    , 62: #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
    , 63: #div^#(#pos(@x), #0()) -> c_141()
    , 64: #div^#(#0(), #neg(@y)) -> c_142()
    , 65: #div^#(#0(), #pos(@y)) -> c_143()
    , 66: #div^#(#0(), #0()) -> c_144()
    , 67: +^#(@x, @y) -> c_21(#add^#(@x, @y))
    , 68: *^#(@x, @y) -> c_24(#mult^#(@x, @y))
    , 69: #less^#(@x, @y) ->
          c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 70: #greater^#(@x, @y) ->
          c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 71: #ckgt^#(#EQ()) -> c_70()
    , 72: #ckgt^#(#LT()) -> c_71()
    , 73: #ckgt^#(#GT()) -> c_72()
    , 74: #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
    , 75: #compare^#(#neg(@x), #pos(@y)) -> c_83()
    , 76: #compare^#(#neg(@x), #0()) -> c_84()
    , 77: #compare^#(#pos(@x), #neg(@y)) -> c_85()
    , 78: #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
    , 79: #compare^#(#pos(@x), #0()) -> c_87()
    , 80: #compare^#(#0(), #neg(@y)) -> c_88()
    , 81: #compare^#(#0(), #pos(@y)) -> c_89()
    , 82: #compare^#(#0(), #0()) -> c_90()
    , 83: #compare^#(#0(), #s(@y)) -> c_91()
    , 84: #compare^#(#s(@x), #0()) -> c_92()
    , 85: #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
    , 86: mult#1^#(nil(), @b2) -> c_49()
    , 87: #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
    , 88: #add^#(#neg(#s(#s(@x))), @y) ->
          c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 89: #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
    , 90: #add^#(#pos(#s(#s(@x))), @y) ->
          c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 91: #add^#(#0(), @y) -> c_77()
    , 92: #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
    , 93: #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
    , 94: #mult^#(#neg(@x), #0()) -> c_125()
    , 95: #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
    , 96: #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
    , 97: #mult^#(#pos(@x), #0()) -> c_128()
    , 98: #mult^#(#0(), #neg(@y)) -> c_129()
    , 99: #mult^#(#0(), #pos(@y)) -> c_130()
    , 100: #mult^#(#0(), #0()) -> c_131()
    , 101: sub'#5^#(#false(), @z, @zs) -> c_26()
    , 102: #cklt^#(#EQ()) -> c_117()
    , 103: #cklt^#(#LT()) -> c_118()
    , 104: #cklt^#(#GT()) -> c_119()
    , 105: #eq^#(nil(), nil()) -> c_94()
    , 106: #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
    , 107: #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
    , 108: #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
    , 109: #eq^#(#neg(@x), #pos(@y)) -> c_98()
    , 110: #eq^#(#neg(@x), #0()) -> c_99()
    , 111: #eq^#(#pos(@x), #neg(@y)) -> c_100()
    , 112: #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
    , 113: #eq^#(#pos(@x), #0()) -> c_102()
    , 114: #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
    , 115: #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
           c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 116: #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
    , 117: #eq^#(::(@x_1, @x_2), nil()) -> c_106()
    , 118: #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
    , 119: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
           c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 120: #eq^#(#0(), #neg(@y)) -> c_109()
    , 121: #eq^#(#0(), #pos(@y)) -> c_110()
    , 122: #eq^#(#0(), #0()) -> c_111()
    , 123: #eq^#(#0(), #s(@y)) -> c_112()
    , 124: #eq^#(#s(@x), #0()) -> c_113()
    , 125: #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
    , 126: sub'#2^#(nil(), @r, @x, @xs) -> c_30()
    , 127: compare#4^#(#false(), @r, @x, @y) -> c_56()
    , 128: sub'#1^#(nil(), @b2, @r) -> c_40()
    , 129: add'#1^#(nil(), @b2, @r) -> c_44()
    , 130: add'#2^#(nil(), @r, @x, @xs) -> c_46()
    , 131: #natsub^#(@x, #0()) -> c_66()
    , 132: #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
    , 133: #natdiv^#(#0(), #0()) -> c_68()
    , 134: #natdiv^#(#s(@x), #s(@y)) ->
           c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
    , 135: #pred^#(#neg(#s(@x))) -> c_145()
    , 136: #pred^#(#pos(#s(#0()))) -> c_146()
    , 137: #pred^#(#pos(#s(#s(@x)))) -> c_147()
    , 138: #pred^#(#0()) -> c_148()
    , 139: #succ^#(#neg(#s(#0()))) -> c_132()
    , 140: #succ^#(#neg(#s(#s(@x)))) -> c_133()
    , 141: #succ^#(#pos(#s(@x))) -> c_134()
    , 142: #succ^#(#0()) -> c_135()
    , 143: #and^#(#true(), #true()) -> c_78()
    , 144: #and^#(#true(), #false()) -> c_79()
    , 145: #and^#(#false(), #true()) -> c_80()
    , 146: #and^#(#false(), #false()) -> c_81()
    , 147: #natmult^#(#0(), @y) -> c_115()
    , 148: #natmult^#(#s(@x), @y) ->
           c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }

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

Strict DPs:
  { sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , sum^#(@x, @y, @r) ->
    c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
  , sum#1^#(@s) ->
    c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sum#2^#(#false(), @s) ->
    c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
         #equal^#(@s, #pos(#s(#0()))))
  , sum#3^#(#false(), @s) ->
    c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
         #equal^#(@s, #pos(#s(#s(#0())))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#4^#(tuple#2(@zs, @s), @z) ->
    c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
         #equal^#(@s, #pos(#s(#0()))))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , diff^#(@x, @y, @r) ->
    c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
         +^#(+(@x, @y), @r),
         +^#(@x, @y),
         diff#1^#(#less(-(-(@x, @y), @r), #0())),
         #less^#(-(-(@x, @y), @r), #0()),
         -^#(-(@x, @y), @r),
         -^#(@x, @y))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , compare#3^#(@r, @x, @y) ->
    c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
  , compare#5^#(#false(), @x, @y) ->
    c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
  , compare#4^#(#true(), @r, @x, @y) ->
    c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak DPs:
  { -^#(@x, @y) -> c_1(#sub^#(@x, @y))
  , #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
  , #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
  , #sub^#(@x, #0()) -> c_122()
  , sub#1^#(tuple#2(@b, @_@1)) -> c_12()
  , #abs^#(#neg(@x)) -> c_62()
  , #abs^#(#pos(@x)) -> c_63()
  , #abs^#(#0()) -> c_64()
  , #abs^#(#s(@x)) -> c_65()
  , diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
  , diff#1^#(#false()) -> c_4(#abs^#(#0()))
  , mult#3^#(#false(), @b2, @zs) -> c_43()
  , #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
  , div^#(@x, @y) -> c_6(#div^#(@x, @y))
  , #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #0()) -> c_138()
  , #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #0()) -> c_141()
  , #div^#(#0(), #neg(@y)) -> c_142()
  , #div^#(#0(), #pos(@y)) -> c_143()
  , #div^#(#0(), #0()) -> c_144()
  , bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
  , +^#(@x, @y) -> c_21(#add^#(@x, @y))
  , *^#(@x, @y) -> c_24(#mult^#(@x, @y))
  , mod^#(@x, @y) ->
    c_10(-^#(@x, *(@x, div(@x, @y))),
         *^#(@x, div(@x, @y)),
         div^#(@x, @y))
  , #less^#(@x, @y) ->
    c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #greater^#(@x, @y) ->
    c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_70()
  , #ckgt^#(#LT()) -> c_71()
  , #ckgt^#(#GT()) -> c_72()
  , #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
  , #compare^#(#neg(@x), #pos(@y)) -> c_83()
  , #compare^#(#neg(@x), #0()) -> c_84()
  , #compare^#(#pos(@x), #neg(@y)) -> c_85()
  , #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_87()
  , #compare^#(#0(), #neg(@y)) -> c_88()
  , #compare^#(#0(), #pos(@y)) -> c_89()
  , #compare^#(#0(), #0()) -> c_90()
  , #compare^#(#0(), #s(@y)) -> c_91()
  , #compare^#(#s(@x), #0()) -> c_92()
  , #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
  , mult#1^#(nil(), @b2) -> c_49()
  , sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
  , sum#3^#(#true(), @s) ->
    c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
  , #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_77()
  , sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
  , sum#4^#(#false()) ->
    c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
  , #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #0()) -> c_125()
  , #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #0()) -> c_128()
  , #mult^#(#0(), #neg(@y)) -> c_129()
  , #mult^#(#0(), #pos(@y)) -> c_130()
  , #mult^#(#0(), #0()) -> c_131()
  , sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
  , sub'#5^#(#false(), @z, @zs) -> c_26()
  , #cklt^#(#EQ()) -> c_117()
  , #cklt^#(#LT()) -> c_118()
  , #cklt^#(#GT()) -> c_119()
  , #eq^#(nil(), nil()) -> c_94()
  , #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
  , #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
  , #eq^#(#neg(@x), #pos(@y)) -> c_98()
  , #eq^#(#neg(@x), #0()) -> c_99()
  , #eq^#(#pos(@x), #neg(@y)) -> c_100()
  , #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_102()
  , #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
  , #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_106()
  , #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #neg(@y)) -> c_109()
  , #eq^#(#0(), #pos(@y)) -> c_110()
  , #eq^#(#0(), #0()) -> c_111()
  , #eq^#(#0(), #s(@y)) -> c_112()
  , #eq^#(#s(@x), #0()) -> c_113()
  , #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
  , sub'#2^#(nil(), @r, @x, @xs) -> c_30()
  , compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
  , compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
  , compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
  , compare#6^#(#false()) -> c_54(#abs^#(#0()))
  , compare#4^#(#false(), @r, @x, @y) -> c_56()
  , sub'#1^#(nil(), @b2, @r) -> c_40()
  , add'#1^#(nil(), @b2, @r) -> c_44()
  , add'#2^#(nil(), @r, @x, @xs) -> c_46()
  , compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
  , #natsub^#(@x, #0()) -> c_66()
  , #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
  , #natdiv^#(#0(), #0()) -> c_68()
  , #natdiv^#(#s(@x), #s(@y)) ->
    c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
  , #pred^#(#neg(#s(@x))) -> c_145()
  , #pred^#(#pos(#s(#0()))) -> c_146()
  , #pred^#(#pos(#s(#s(@x)))) -> c_147()
  , #pred^#(#0()) -> c_148()
  , #succ^#(#neg(#s(#0()))) -> c_132()
  , #succ^#(#neg(#s(#s(@x)))) -> c_133()
  , #succ^#(#pos(#s(@x))) -> c_134()
  , #succ^#(#0()) -> c_135()
  , #and^#(#true(), #true()) -> c_78()
  , #and^#(#true(), #false()) -> c_79()
  , #and^#(#false(), #true()) -> c_80()
  , #and^#(#false(), #false()) -> c_81()
  , #natmult^#(#0(), @y) -> c_115()
  , #natmult^#(#s(@x), @y) ->
    c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {16,18,20,23} by
applications of Pre({16,18,20,23}) = {15,17,19,24}. Here rules are
labeled as follows:

  DPs:
    { 1: sub^#(@b1, @b2) ->
         c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
             sub'^#(@b1, @b2, #abs(#0())),
             #abs^#(#0()))
    , 2: sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
    , 3: mult#2^#(@zs, @b2, @x) ->
         c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
             #equal^#(@x, #pos(#s(#0()))))
    , 4: mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
    , 5: bitToInt'#1^#(::(@x, @xs), @n) ->
         c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
             *^#(@x, @n),
             bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
             *^#(@n, #pos(#s(#s(#0())))))
    , 6: bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
    , 7: sum^#(@x, @y, @r) ->
         c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
    , 8: sum#1^#(@s) ->
         c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
    , 9: mult3^#(@b1, @b2, @b3) ->
         c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
    , 10: mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
    , 11: leq^#(@b1, @b2) ->
          c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
               compare^#(@b1, @b2))
    , 12: compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
    , 13: mult#1^#(::(@x, @xs), @b2) ->
          c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               #abs^#(#0()),
               mult^#(@xs, @b2))
    , 14: bitToInt^#(@b) ->
          c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
    , 15: sum#2^#(#false(), @s) ->
          c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
               #equal^#(@s, #pos(#s(#0()))))
    , 16: sum#3^#(#false(), @s) ->
          c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
               #equal^#(@s, #pos(#s(#s(#0())))))
    , 17: sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
    , 18: sub'#4^#(tuple#2(@zs, @s), @z) ->
          c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
               #equal^#(@s, #pos(#s(#0()))))
    , 19: sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
    , 20: diff^#(@x, @y, @r) ->
          c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               +^#(+(@x, @y), @r),
               +^#(@x, @y),
               diff#1^#(#less(-(-(@x, @y), @r), #0())),
               #less^#(-(-(@x, @y), @r), #0()),
               -^#(-(@x, @y), @r),
               -^#(@x, @y))
    , 21: compare#2^#(::(@y, @ys), @x, @xs) ->
          c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
    , 22: compare#3^#(@r, @x, @y) ->
          c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
    , 23: compare#5^#(#false(), @x, @y) ->
          c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
    , 24: compare#4^#(#true(), @r, @x, @y) ->
          c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
    , 25: add^#(@b1, @b2) ->
          c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
    , 26: add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
    , 27: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_39(add'^#(@xs, @ys, @r'))
    , 28: sub'#1^#(::(@x, @xs), @b2, @r) ->
          c_41(sub'#2^#(@b2, @r, @x, @xs))
    , 29: add'#1^#(::(@x, @xs), @b2, @r) ->
          c_45(add'#2^#(@b2, @r, @x, @xs))
    , 30: add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
    , 31: compare#1^#(::(@x, @xs), @b2) ->
          c_61(compare#2^#(@b2, @x, @xs))
    , 32: -^#(@x, @y) -> c_1(#sub^#(@x, @y))
    , 33: #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
    , 34: #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
    , 35: #sub^#(@x, #0()) -> c_122()
    , 36: sub#1^#(tuple#2(@b, @_@1)) -> c_12()
    , 37: #abs^#(#neg(@x)) -> c_62()
    , 38: #abs^#(#pos(@x)) -> c_63()
    , 39: #abs^#(#0()) -> c_64()
    , 40: #abs^#(#s(@x)) -> c_65()
    , 41: diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
    , 42: diff#1^#(#false()) -> c_4(#abs^#(#0()))
    , 43: mult#3^#(#false(), @b2, @zs) -> c_43()
    , 44: #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
    , 45: div^#(@x, @y) -> c_6(#div^#(@x, @y))
    , 46: #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
    , 47: #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
    , 48: #div^#(#neg(@x), #0()) -> c_138()
    , 49: #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
    , 50: #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
    , 51: #div^#(#pos(@x), #0()) -> c_141()
    , 52: #div^#(#0(), #neg(@y)) -> c_142()
    , 53: #div^#(#0(), #pos(@y)) -> c_143()
    , 54: #div^#(#0(), #0()) -> c_144()
    , 55: bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
    , 56: +^#(@x, @y) -> c_21(#add^#(@x, @y))
    , 57: *^#(@x, @y) -> c_24(#mult^#(@x, @y))
    , 58: mod^#(@x, @y) ->
          c_10(-^#(@x, *(@x, div(@x, @y))),
               *^#(@x, div(@x, @y)),
               div^#(@x, @y))
    , 59: #less^#(@x, @y) ->
          c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 60: #greater^#(@x, @y) ->
          c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 61: #ckgt^#(#EQ()) -> c_70()
    , 62: #ckgt^#(#LT()) -> c_71()
    , 63: #ckgt^#(#GT()) -> c_72()
    , 64: #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
    , 65: #compare^#(#neg(@x), #pos(@y)) -> c_83()
    , 66: #compare^#(#neg(@x), #0()) -> c_84()
    , 67: #compare^#(#pos(@x), #neg(@y)) -> c_85()
    , 68: #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
    , 69: #compare^#(#pos(@x), #0()) -> c_87()
    , 70: #compare^#(#0(), #neg(@y)) -> c_88()
    , 71: #compare^#(#0(), #pos(@y)) -> c_89()
    , 72: #compare^#(#0(), #0()) -> c_90()
    , 73: #compare^#(#0(), #s(@y)) -> c_91()
    , 74: #compare^#(#s(@x), #0()) -> c_92()
    , 75: #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
    , 76: mult#1^#(nil(), @b2) -> c_49()
    , 77: sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
    , 78: sum#3^#(#true(), @s) ->
          c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
    , 79: #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
    , 80: #add^#(#neg(#s(#s(@x))), @y) ->
          c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 81: #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
    , 82: #add^#(#pos(#s(#s(@x))), @y) ->
          c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 83: #add^#(#0(), @y) -> c_77()
    , 84: sum#4^#(#true()) ->
          c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
    , 85: sum#4^#(#false()) ->
          c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
    , 86: #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
    , 87: #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
    , 88: #mult^#(#neg(@x), #0()) -> c_125()
    , 89: #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
    , 90: #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
    , 91: #mult^#(#pos(@x), #0()) -> c_128()
    , 92: #mult^#(#0(), #neg(@y)) -> c_129()
    , 93: #mult^#(#0(), #pos(@y)) -> c_130()
    , 94: #mult^#(#0(), #0()) -> c_131()
    , 95: sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
    , 96: sub'#5^#(#false(), @z, @zs) -> c_26()
    , 97: #cklt^#(#EQ()) -> c_117()
    , 98: #cklt^#(#LT()) -> c_118()
    , 99: #cklt^#(#GT()) -> c_119()
    , 100: #eq^#(nil(), nil()) -> c_94()
    , 101: #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
    , 102: #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
    , 103: #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
    , 104: #eq^#(#neg(@x), #pos(@y)) -> c_98()
    , 105: #eq^#(#neg(@x), #0()) -> c_99()
    , 106: #eq^#(#pos(@x), #neg(@y)) -> c_100()
    , 107: #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
    , 108: #eq^#(#pos(@x), #0()) -> c_102()
    , 109: #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
    , 110: #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
           c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 111: #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
    , 112: #eq^#(::(@x_1, @x_2), nil()) -> c_106()
    , 113: #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
    , 114: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
           c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 115: #eq^#(#0(), #neg(@y)) -> c_109()
    , 116: #eq^#(#0(), #pos(@y)) -> c_110()
    , 117: #eq^#(#0(), #0()) -> c_111()
    , 118: #eq^#(#0(), #s(@y)) -> c_112()
    , 119: #eq^#(#s(@x), #0()) -> c_113()
    , 120: #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
    , 121: sub'#2^#(nil(), @r, @x, @xs) -> c_30()
    , 122: compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
    , 123: compare#5^#(#true(), @x, @y) ->
           c_35(-^#(#0(), #pos(#s(#0()))))
    , 124: compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
    , 125: compare#6^#(#false()) -> c_54(#abs^#(#0()))
    , 126: compare#4^#(#false(), @r, @x, @y) -> c_56()
    , 127: sub'#1^#(nil(), @b2, @r) -> c_40()
    , 128: add'#1^#(nil(), @b2, @r) -> c_44()
    , 129: add'#2^#(nil(), @r, @x, @xs) -> c_46()
    , 130: compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
    , 131: #natsub^#(@x, #0()) -> c_66()
    , 132: #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
    , 133: #natdiv^#(#0(), #0()) -> c_68()
    , 134: #natdiv^#(#s(@x), #s(@y)) ->
           c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
    , 135: #pred^#(#neg(#s(@x))) -> c_145()
    , 136: #pred^#(#pos(#s(#0()))) -> c_146()
    , 137: #pred^#(#pos(#s(#s(@x)))) -> c_147()
    , 138: #pred^#(#0()) -> c_148()
    , 139: #succ^#(#neg(#s(#0()))) -> c_132()
    , 140: #succ^#(#neg(#s(#s(@x)))) -> c_133()
    , 141: #succ^#(#pos(#s(@x))) -> c_134()
    , 142: #succ^#(#0()) -> c_135()
    , 143: #and^#(#true(), #true()) -> c_78()
    , 144: #and^#(#true(), #false()) -> c_79()
    , 145: #and^#(#false(), #true()) -> c_80()
    , 146: #and^#(#false(), #false()) -> c_81()
    , 147: #natmult^#(#0(), @y) -> c_115()
    , 148: #natmult^#(#s(@x), @y) ->
           c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }

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

Strict DPs:
  { sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , sum^#(@x, @y, @r) ->
    c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
  , sum#1^#(@s) ->
    c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sum#2^#(#false(), @s) ->
    c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
         #equal^#(@s, #pos(#s(#0()))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , compare#3^#(@r, @x, @y) ->
    c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
  , compare#4^#(#true(), @r, @x, @y) ->
    c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak DPs:
  { -^#(@x, @y) -> c_1(#sub^#(@x, @y))
  , #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
  , #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
  , #sub^#(@x, #0()) -> c_122()
  , sub#1^#(tuple#2(@b, @_@1)) -> c_12()
  , #abs^#(#neg(@x)) -> c_62()
  , #abs^#(#pos(@x)) -> c_63()
  , #abs^#(#0()) -> c_64()
  , #abs^#(#s(@x)) -> c_65()
  , diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
  , diff#1^#(#false()) -> c_4(#abs^#(#0()))
  , mult#3^#(#false(), @b2, @zs) -> c_43()
  , #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
  , div^#(@x, @y) -> c_6(#div^#(@x, @y))
  , #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #0()) -> c_138()
  , #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #0()) -> c_141()
  , #div^#(#0(), #neg(@y)) -> c_142()
  , #div^#(#0(), #pos(@y)) -> c_143()
  , #div^#(#0(), #0()) -> c_144()
  , bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
  , +^#(@x, @y) -> c_21(#add^#(@x, @y))
  , *^#(@x, @y) -> c_24(#mult^#(@x, @y))
  , mod^#(@x, @y) ->
    c_10(-^#(@x, *(@x, div(@x, @y))),
         *^#(@x, div(@x, @y)),
         div^#(@x, @y))
  , #less^#(@x, @y) ->
    c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #greater^#(@x, @y) ->
    c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_70()
  , #ckgt^#(#LT()) -> c_71()
  , #ckgt^#(#GT()) -> c_72()
  , #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
  , #compare^#(#neg(@x), #pos(@y)) -> c_83()
  , #compare^#(#neg(@x), #0()) -> c_84()
  , #compare^#(#pos(@x), #neg(@y)) -> c_85()
  , #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_87()
  , #compare^#(#0(), #neg(@y)) -> c_88()
  , #compare^#(#0(), #pos(@y)) -> c_89()
  , #compare^#(#0(), #0()) -> c_90()
  , #compare^#(#0(), #s(@y)) -> c_91()
  , #compare^#(#s(@x), #0()) -> c_92()
  , #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
  , mult#1^#(nil(), @b2) -> c_49()
  , sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
  , sum#3^#(#true(), @s) ->
    c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
  , sum#3^#(#false(), @s) ->
    c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
         #equal^#(@s, #pos(#s(#s(#0())))))
  , #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_77()
  , sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
  , sum#4^#(#false()) ->
    c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
  , #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #0()) -> c_125()
  , #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #0()) -> c_128()
  , #mult^#(#0(), #neg(@y)) -> c_129()
  , #mult^#(#0(), #pos(@y)) -> c_130()
  , #mult^#(#0(), #0()) -> c_131()
  , sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
  , sub'#5^#(#false(), @z, @zs) -> c_26()
  , #cklt^#(#EQ()) -> c_117()
  , #cklt^#(#LT()) -> c_118()
  , #cklt^#(#GT()) -> c_119()
  , sub'#4^#(tuple#2(@zs, @s), @z) ->
    c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
         #equal^#(@s, #pos(#s(#0()))))
  , #eq^#(nil(), nil()) -> c_94()
  , #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
  , #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
  , #eq^#(#neg(@x), #pos(@y)) -> c_98()
  , #eq^#(#neg(@x), #0()) -> c_99()
  , #eq^#(#pos(@x), #neg(@y)) -> c_100()
  , #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_102()
  , #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
  , #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_106()
  , #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #neg(@y)) -> c_109()
  , #eq^#(#0(), #pos(@y)) -> c_110()
  , #eq^#(#0(), #0()) -> c_111()
  , #eq^#(#0(), #s(@y)) -> c_112()
  , #eq^#(#s(@x), #0()) -> c_113()
  , #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
  , sub'#2^#(nil(), @r, @x, @xs) -> c_30()
  , diff^#(@x, @y, @r) ->
    c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
         +^#(+(@x, @y), @r),
         +^#(@x, @y),
         diff#1^#(#less(-(-(@x, @y), @r), #0())),
         #less^#(-(-(@x, @y), @r), #0()),
         -^#(-(@x, @y), @r),
         -^#(@x, @y))
  , compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
  , compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
  , compare#5^#(#false(), @x, @y) ->
    c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
  , compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
  , compare#6^#(#false()) -> c_54(#abs^#(#0()))
  , compare#4^#(#false(), @r, @x, @y) -> c_56()
  , sub'#1^#(nil(), @b2, @r) -> c_40()
  , add'#1^#(nil(), @b2, @r) -> c_44()
  , add'#2^#(nil(), @r, @x, @xs) -> c_46()
  , compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
  , #natsub^#(@x, #0()) -> c_66()
  , #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
  , #natdiv^#(#0(), #0()) -> c_68()
  , #natdiv^#(#s(@x), #s(@y)) ->
    c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
  , #pred^#(#neg(#s(@x))) -> c_145()
  , #pred^#(#pos(#s(#0()))) -> c_146()
  , #pred^#(#pos(#s(#s(@x)))) -> c_147()
  , #pred^#(#0()) -> c_148()
  , #succ^#(#neg(#s(#0()))) -> c_132()
  , #succ^#(#neg(#s(#s(@x)))) -> c_133()
  , #succ^#(#pos(#s(@x))) -> c_134()
  , #succ^#(#0()) -> c_135()
  , #and^#(#true(), #true()) -> c_78()
  , #and^#(#true(), #false()) -> c_79()
  , #and^#(#false(), #true()) -> c_80()
  , #and^#(#false(), #false()) -> c_81()
  , #natmult^#(#0(), @y) -> c_115()
  , #natmult^#(#s(@x), @y) ->
    c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {15,20} by applications of
Pre({15,20}) = {8,19}. Here rules are labeled as follows:

  DPs:
    { 1: sub^#(@b1, @b2) ->
         c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
             sub'^#(@b1, @b2, #abs(#0())),
             #abs^#(#0()))
    , 2: sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
    , 3: mult#2^#(@zs, @b2, @x) ->
         c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
             #equal^#(@x, #pos(#s(#0()))))
    , 4: mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
    , 5: bitToInt'#1^#(::(@x, @xs), @n) ->
         c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
             *^#(@x, @n),
             bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
             *^#(@n, #pos(#s(#s(#0())))))
    , 6: bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
    , 7: sum^#(@x, @y, @r) ->
         c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
    , 8: sum#1^#(@s) ->
         c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
    , 9: mult3^#(@b1, @b2, @b3) ->
         c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
    , 10: mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
    , 11: leq^#(@b1, @b2) ->
          c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
               compare^#(@b1, @b2))
    , 12: compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
    , 13: mult#1^#(::(@x, @xs), @b2) ->
          c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               #abs^#(#0()),
               mult^#(@xs, @b2))
    , 14: bitToInt^#(@b) ->
          c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
    , 15: sum#2^#(#false(), @s) ->
          c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
               #equal^#(@s, #pos(#s(#0()))))
    , 16: sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
    , 17: sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
    , 18: compare#2^#(::(@y, @ys), @x, @xs) ->
          c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
    , 19: compare#3^#(@r, @x, @y) ->
          c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
    , 20: compare#4^#(#true(), @r, @x, @y) ->
          c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
    , 21: add^#(@b1, @b2) ->
          c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
    , 22: add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
    , 23: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_39(add'^#(@xs, @ys, @r'))
    , 24: sub'#1^#(::(@x, @xs), @b2, @r) ->
          c_41(sub'#2^#(@b2, @r, @x, @xs))
    , 25: add'#1^#(::(@x, @xs), @b2, @r) ->
          c_45(add'#2^#(@b2, @r, @x, @xs))
    , 26: add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
    , 27: compare#1^#(::(@x, @xs), @b2) ->
          c_61(compare#2^#(@b2, @x, @xs))
    , 28: -^#(@x, @y) -> c_1(#sub^#(@x, @y))
    , 29: #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
    , 30: #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
    , 31: #sub^#(@x, #0()) -> c_122()
    , 32: sub#1^#(tuple#2(@b, @_@1)) -> c_12()
    , 33: #abs^#(#neg(@x)) -> c_62()
    , 34: #abs^#(#pos(@x)) -> c_63()
    , 35: #abs^#(#0()) -> c_64()
    , 36: #abs^#(#s(@x)) -> c_65()
    , 37: diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
    , 38: diff#1^#(#false()) -> c_4(#abs^#(#0()))
    , 39: mult#3^#(#false(), @b2, @zs) -> c_43()
    , 40: #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
    , 41: div^#(@x, @y) -> c_6(#div^#(@x, @y))
    , 42: #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
    , 43: #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
    , 44: #div^#(#neg(@x), #0()) -> c_138()
    , 45: #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
    , 46: #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
    , 47: #div^#(#pos(@x), #0()) -> c_141()
    , 48: #div^#(#0(), #neg(@y)) -> c_142()
    , 49: #div^#(#0(), #pos(@y)) -> c_143()
    , 50: #div^#(#0(), #0()) -> c_144()
    , 51: bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
    , 52: +^#(@x, @y) -> c_21(#add^#(@x, @y))
    , 53: *^#(@x, @y) -> c_24(#mult^#(@x, @y))
    , 54: mod^#(@x, @y) ->
          c_10(-^#(@x, *(@x, div(@x, @y))),
               *^#(@x, div(@x, @y)),
               div^#(@x, @y))
    , 55: #less^#(@x, @y) ->
          c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 56: #greater^#(@x, @y) ->
          c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 57: #ckgt^#(#EQ()) -> c_70()
    , 58: #ckgt^#(#LT()) -> c_71()
    , 59: #ckgt^#(#GT()) -> c_72()
    , 60: #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
    , 61: #compare^#(#neg(@x), #pos(@y)) -> c_83()
    , 62: #compare^#(#neg(@x), #0()) -> c_84()
    , 63: #compare^#(#pos(@x), #neg(@y)) -> c_85()
    , 64: #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
    , 65: #compare^#(#pos(@x), #0()) -> c_87()
    , 66: #compare^#(#0(), #neg(@y)) -> c_88()
    , 67: #compare^#(#0(), #pos(@y)) -> c_89()
    , 68: #compare^#(#0(), #0()) -> c_90()
    , 69: #compare^#(#0(), #s(@y)) -> c_91()
    , 70: #compare^#(#s(@x), #0()) -> c_92()
    , 71: #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
    , 72: mult#1^#(nil(), @b2) -> c_49()
    , 73: sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
    , 74: sum#3^#(#true(), @s) ->
          c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
    , 75: sum#3^#(#false(), @s) ->
          c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
               #equal^#(@s, #pos(#s(#s(#0())))))
    , 76: #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
    , 77: #add^#(#neg(#s(#s(@x))), @y) ->
          c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 78: #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
    , 79: #add^#(#pos(#s(#s(@x))), @y) ->
          c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 80: #add^#(#0(), @y) -> c_77()
    , 81: sum#4^#(#true()) ->
          c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
    , 82: sum#4^#(#false()) ->
          c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
    , 83: #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
    , 84: #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
    , 85: #mult^#(#neg(@x), #0()) -> c_125()
    , 86: #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
    , 87: #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
    , 88: #mult^#(#pos(@x), #0()) -> c_128()
    , 89: #mult^#(#0(), #neg(@y)) -> c_129()
    , 90: #mult^#(#0(), #pos(@y)) -> c_130()
    , 91: #mult^#(#0(), #0()) -> c_131()
    , 92: sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
    , 93: sub'#5^#(#false(), @z, @zs) -> c_26()
    , 94: #cklt^#(#EQ()) -> c_117()
    , 95: #cklt^#(#LT()) -> c_118()
    , 96: #cklt^#(#GT()) -> c_119()
    , 97: sub'#4^#(tuple#2(@zs, @s), @z) ->
          c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
               #equal^#(@s, #pos(#s(#0()))))
    , 98: #eq^#(nil(), nil()) -> c_94()
    , 99: #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
    , 100: #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
    , 101: #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
    , 102: #eq^#(#neg(@x), #pos(@y)) -> c_98()
    , 103: #eq^#(#neg(@x), #0()) -> c_99()
    , 104: #eq^#(#pos(@x), #neg(@y)) -> c_100()
    , 105: #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
    , 106: #eq^#(#pos(@x), #0()) -> c_102()
    , 107: #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
    , 108: #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
           c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 109: #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
    , 110: #eq^#(::(@x_1, @x_2), nil()) -> c_106()
    , 111: #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
    , 112: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
           c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 113: #eq^#(#0(), #neg(@y)) -> c_109()
    , 114: #eq^#(#0(), #pos(@y)) -> c_110()
    , 115: #eq^#(#0(), #0()) -> c_111()
    , 116: #eq^#(#0(), #s(@y)) -> c_112()
    , 117: #eq^#(#s(@x), #0()) -> c_113()
    , 118: #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
    , 119: sub'#2^#(nil(), @r, @x, @xs) -> c_30()
    , 120: diff^#(@x, @y, @r) ->
           c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                +^#(+(@x, @y), @r),
                +^#(@x, @y),
                diff#1^#(#less(-(-(@x, @y), @r), #0())),
                #less^#(-(-(@x, @y), @r), #0()),
                -^#(-(@x, @y), @r),
                -^#(@x, @y))
    , 121: compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
    , 122: compare#5^#(#true(), @x, @y) ->
           c_35(-^#(#0(), #pos(#s(#0()))))
    , 123: compare#5^#(#false(), @x, @y) ->
           c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
    , 124: compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
    , 125: compare#6^#(#false()) -> c_54(#abs^#(#0()))
    , 126: compare#4^#(#false(), @r, @x, @y) -> c_56()
    , 127: sub'#1^#(nil(), @b2, @r) -> c_40()
    , 128: add'#1^#(nil(), @b2, @r) -> c_44()
    , 129: add'#2^#(nil(), @r, @x, @xs) -> c_46()
    , 130: compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
    , 131: #natsub^#(@x, #0()) -> c_66()
    , 132: #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
    , 133: #natdiv^#(#0(), #0()) -> c_68()
    , 134: #natdiv^#(#s(@x), #s(@y)) ->
           c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
    , 135: #pred^#(#neg(#s(@x))) -> c_145()
    , 136: #pred^#(#pos(#s(#0()))) -> c_146()
    , 137: #pred^#(#pos(#s(#s(@x)))) -> c_147()
    , 138: #pred^#(#0()) -> c_148()
    , 139: #succ^#(#neg(#s(#0()))) -> c_132()
    , 140: #succ^#(#neg(#s(#s(@x)))) -> c_133()
    , 141: #succ^#(#pos(#s(@x))) -> c_134()
    , 142: #succ^#(#0()) -> c_135()
    , 143: #and^#(#true(), #true()) -> c_78()
    , 144: #and^#(#true(), #false()) -> c_79()
    , 145: #and^#(#false(), #true()) -> c_80()
    , 146: #and^#(#false(), #false()) -> c_81()
    , 147: #natmult^#(#0(), @y) -> c_115()
    , 148: #natmult^#(#s(@x), @y) ->
           c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }

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

Strict DPs:
  { sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , sum^#(@x, @y, @r) ->
    c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
  , sum#1^#(@s) ->
    c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , compare#3^#(@r, @x, @y) ->
    c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak DPs:
  { -^#(@x, @y) -> c_1(#sub^#(@x, @y))
  , #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
  , #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
  , #sub^#(@x, #0()) -> c_122()
  , sub#1^#(tuple#2(@b, @_@1)) -> c_12()
  , #abs^#(#neg(@x)) -> c_62()
  , #abs^#(#pos(@x)) -> c_63()
  , #abs^#(#0()) -> c_64()
  , #abs^#(#s(@x)) -> c_65()
  , diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
  , diff#1^#(#false()) -> c_4(#abs^#(#0()))
  , mult#3^#(#false(), @b2, @zs) -> c_43()
  , #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
  , div^#(@x, @y) -> c_6(#div^#(@x, @y))
  , #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #0()) -> c_138()
  , #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #0()) -> c_141()
  , #div^#(#0(), #neg(@y)) -> c_142()
  , #div^#(#0(), #pos(@y)) -> c_143()
  , #div^#(#0(), #0()) -> c_144()
  , bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
  , +^#(@x, @y) -> c_21(#add^#(@x, @y))
  , *^#(@x, @y) -> c_24(#mult^#(@x, @y))
  , mod^#(@x, @y) ->
    c_10(-^#(@x, *(@x, div(@x, @y))),
         *^#(@x, div(@x, @y)),
         div^#(@x, @y))
  , #less^#(@x, @y) ->
    c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #greater^#(@x, @y) ->
    c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_70()
  , #ckgt^#(#LT()) -> c_71()
  , #ckgt^#(#GT()) -> c_72()
  , #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
  , #compare^#(#neg(@x), #pos(@y)) -> c_83()
  , #compare^#(#neg(@x), #0()) -> c_84()
  , #compare^#(#pos(@x), #neg(@y)) -> c_85()
  , #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_87()
  , #compare^#(#0(), #neg(@y)) -> c_88()
  , #compare^#(#0(), #pos(@y)) -> c_89()
  , #compare^#(#0(), #0()) -> c_90()
  , #compare^#(#0(), #s(@y)) -> c_91()
  , #compare^#(#s(@x), #0()) -> c_92()
  , #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
  , mult#1^#(nil(), @b2) -> c_49()
  , sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
  , sum#2^#(#false(), @s) ->
    c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
         #equal^#(@s, #pos(#s(#0()))))
  , sum#3^#(#true(), @s) ->
    c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
  , sum#3^#(#false(), @s) ->
    c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
         #equal^#(@s, #pos(#s(#s(#0())))))
  , #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_77()
  , sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
  , sum#4^#(#false()) ->
    c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
  , #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #0()) -> c_125()
  , #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #0()) -> c_128()
  , #mult^#(#0(), #neg(@y)) -> c_129()
  , #mult^#(#0(), #pos(@y)) -> c_130()
  , #mult^#(#0(), #0()) -> c_131()
  , sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
  , sub'#5^#(#false(), @z, @zs) -> c_26()
  , #cklt^#(#EQ()) -> c_117()
  , #cklt^#(#LT()) -> c_118()
  , #cklt^#(#GT()) -> c_119()
  , sub'#4^#(tuple#2(@zs, @s), @z) ->
    c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
         #equal^#(@s, #pos(#s(#0()))))
  , #eq^#(nil(), nil()) -> c_94()
  , #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
  , #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
  , #eq^#(#neg(@x), #pos(@y)) -> c_98()
  , #eq^#(#neg(@x), #0()) -> c_99()
  , #eq^#(#pos(@x), #neg(@y)) -> c_100()
  , #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_102()
  , #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
  , #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_106()
  , #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #neg(@y)) -> c_109()
  , #eq^#(#0(), #pos(@y)) -> c_110()
  , #eq^#(#0(), #0()) -> c_111()
  , #eq^#(#0(), #s(@y)) -> c_112()
  , #eq^#(#s(@x), #0()) -> c_113()
  , #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
  , sub'#2^#(nil(), @r, @x, @xs) -> c_30()
  , diff^#(@x, @y, @r) ->
    c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
         +^#(+(@x, @y), @r),
         +^#(@x, @y),
         diff#1^#(#less(-(-(@x, @y), @r), #0())),
         #less^#(-(-(@x, @y), @r), #0()),
         -^#(-(@x, @y), @r),
         -^#(@x, @y))
  , compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
  , compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
  , compare#5^#(#false(), @x, @y) ->
    c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
  , compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
  , compare#6^#(#false()) -> c_54(#abs^#(#0()))
  , compare#4^#(#true(), @r, @x, @y) ->
    c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
  , compare#4^#(#false(), @r, @x, @y) -> c_56()
  , sub'#1^#(nil(), @b2, @r) -> c_40()
  , add'#1^#(nil(), @b2, @r) -> c_44()
  , add'#2^#(nil(), @r, @x, @xs) -> c_46()
  , compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
  , #natsub^#(@x, #0()) -> c_66()
  , #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
  , #natdiv^#(#0(), #0()) -> c_68()
  , #natdiv^#(#s(@x), #s(@y)) ->
    c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
  , #pred^#(#neg(#s(@x))) -> c_145()
  , #pred^#(#pos(#s(#0()))) -> c_146()
  , #pred^#(#pos(#s(#s(@x)))) -> c_147()
  , #pred^#(#0()) -> c_148()
  , #succ^#(#neg(#s(#0()))) -> c_132()
  , #succ^#(#neg(#s(#s(@x)))) -> c_133()
  , #succ^#(#pos(#s(@x))) -> c_134()
  , #succ^#(#0()) -> c_135()
  , #and^#(#true(), #true()) -> c_78()
  , #and^#(#true(), #false()) -> c_79()
  , #and^#(#false(), #true()) -> c_80()
  , #and^#(#false(), #false()) -> c_81()
  , #natmult^#(#0(), @y) -> c_115()
  , #natmult^#(#s(@x), @y) ->
    c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {8,18} by applications of
Pre({8,18}) = {7,17}. Here rules are labeled as follows:

  DPs:
    { 1: sub^#(@b1, @b2) ->
         c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
             sub'^#(@b1, @b2, #abs(#0())),
             #abs^#(#0()))
    , 2: sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
    , 3: mult#2^#(@zs, @b2, @x) ->
         c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
             #equal^#(@x, #pos(#s(#0()))))
    , 4: mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
    , 5: bitToInt'#1^#(::(@x, @xs), @n) ->
         c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
             *^#(@x, @n),
             bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
             *^#(@n, #pos(#s(#s(#0())))))
    , 6: bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
    , 7: sum^#(@x, @y, @r) ->
         c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
    , 8: sum#1^#(@s) ->
         c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
    , 9: mult3^#(@b1, @b2, @b3) ->
         c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
    , 10: mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
    , 11: leq^#(@b1, @b2) ->
          c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
               compare^#(@b1, @b2))
    , 12: compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
    , 13: mult#1^#(::(@x, @xs), @b2) ->
          c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               #abs^#(#0()),
               mult^#(@xs, @b2))
    , 14: bitToInt^#(@b) ->
          c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
    , 15: sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
    , 16: sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
    , 17: compare#2^#(::(@y, @ys), @x, @xs) ->
          c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
    , 18: compare#3^#(@r, @x, @y) ->
          c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
    , 19: add^#(@b1, @b2) ->
          c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
    , 20: add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
    , 21: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_39(add'^#(@xs, @ys, @r'))
    , 22: sub'#1^#(::(@x, @xs), @b2, @r) ->
          c_41(sub'#2^#(@b2, @r, @x, @xs))
    , 23: add'#1^#(::(@x, @xs), @b2, @r) ->
          c_45(add'#2^#(@b2, @r, @x, @xs))
    , 24: add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
    , 25: compare#1^#(::(@x, @xs), @b2) ->
          c_61(compare#2^#(@b2, @x, @xs))
    , 26: -^#(@x, @y) -> c_1(#sub^#(@x, @y))
    , 27: #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
    , 28: #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
    , 29: #sub^#(@x, #0()) -> c_122()
    , 30: sub#1^#(tuple#2(@b, @_@1)) -> c_12()
    , 31: #abs^#(#neg(@x)) -> c_62()
    , 32: #abs^#(#pos(@x)) -> c_63()
    , 33: #abs^#(#0()) -> c_64()
    , 34: #abs^#(#s(@x)) -> c_65()
    , 35: diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
    , 36: diff#1^#(#false()) -> c_4(#abs^#(#0()))
    , 37: mult#3^#(#false(), @b2, @zs) -> c_43()
    , 38: #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
    , 39: div^#(@x, @y) -> c_6(#div^#(@x, @y))
    , 40: #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
    , 41: #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
    , 42: #div^#(#neg(@x), #0()) -> c_138()
    , 43: #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
    , 44: #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
    , 45: #div^#(#pos(@x), #0()) -> c_141()
    , 46: #div^#(#0(), #neg(@y)) -> c_142()
    , 47: #div^#(#0(), #pos(@y)) -> c_143()
    , 48: #div^#(#0(), #0()) -> c_144()
    , 49: bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
    , 50: +^#(@x, @y) -> c_21(#add^#(@x, @y))
    , 51: *^#(@x, @y) -> c_24(#mult^#(@x, @y))
    , 52: mod^#(@x, @y) ->
          c_10(-^#(@x, *(@x, div(@x, @y))),
               *^#(@x, div(@x, @y)),
               div^#(@x, @y))
    , 53: #less^#(@x, @y) ->
          c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 54: #greater^#(@x, @y) ->
          c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 55: #ckgt^#(#EQ()) -> c_70()
    , 56: #ckgt^#(#LT()) -> c_71()
    , 57: #ckgt^#(#GT()) -> c_72()
    , 58: #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
    , 59: #compare^#(#neg(@x), #pos(@y)) -> c_83()
    , 60: #compare^#(#neg(@x), #0()) -> c_84()
    , 61: #compare^#(#pos(@x), #neg(@y)) -> c_85()
    , 62: #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
    , 63: #compare^#(#pos(@x), #0()) -> c_87()
    , 64: #compare^#(#0(), #neg(@y)) -> c_88()
    , 65: #compare^#(#0(), #pos(@y)) -> c_89()
    , 66: #compare^#(#0(), #0()) -> c_90()
    , 67: #compare^#(#0(), #s(@y)) -> c_91()
    , 68: #compare^#(#s(@x), #0()) -> c_92()
    , 69: #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
    , 70: mult#1^#(nil(), @b2) -> c_49()
    , 71: sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
    , 72: sum#2^#(#false(), @s) ->
          c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
               #equal^#(@s, #pos(#s(#0()))))
    , 73: sum#3^#(#true(), @s) ->
          c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
    , 74: sum#3^#(#false(), @s) ->
          c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
               #equal^#(@s, #pos(#s(#s(#0())))))
    , 75: #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
    , 76: #add^#(#neg(#s(#s(@x))), @y) ->
          c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 77: #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
    , 78: #add^#(#pos(#s(#s(@x))), @y) ->
          c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 79: #add^#(#0(), @y) -> c_77()
    , 80: sum#4^#(#true()) ->
          c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
    , 81: sum#4^#(#false()) ->
          c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
    , 82: #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
    , 83: #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
    , 84: #mult^#(#neg(@x), #0()) -> c_125()
    , 85: #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
    , 86: #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
    , 87: #mult^#(#pos(@x), #0()) -> c_128()
    , 88: #mult^#(#0(), #neg(@y)) -> c_129()
    , 89: #mult^#(#0(), #pos(@y)) -> c_130()
    , 90: #mult^#(#0(), #0()) -> c_131()
    , 91: sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
    , 92: sub'#5^#(#false(), @z, @zs) -> c_26()
    , 93: #cklt^#(#EQ()) -> c_117()
    , 94: #cklt^#(#LT()) -> c_118()
    , 95: #cklt^#(#GT()) -> c_119()
    , 96: sub'#4^#(tuple#2(@zs, @s), @z) ->
          c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
               #equal^#(@s, #pos(#s(#0()))))
    , 97: #eq^#(nil(), nil()) -> c_94()
    , 98: #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
    , 99: #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
    , 100: #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
    , 101: #eq^#(#neg(@x), #pos(@y)) -> c_98()
    , 102: #eq^#(#neg(@x), #0()) -> c_99()
    , 103: #eq^#(#pos(@x), #neg(@y)) -> c_100()
    , 104: #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
    , 105: #eq^#(#pos(@x), #0()) -> c_102()
    , 106: #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
    , 107: #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
           c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 108: #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
    , 109: #eq^#(::(@x_1, @x_2), nil()) -> c_106()
    , 110: #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
    , 111: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
           c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 112: #eq^#(#0(), #neg(@y)) -> c_109()
    , 113: #eq^#(#0(), #pos(@y)) -> c_110()
    , 114: #eq^#(#0(), #0()) -> c_111()
    , 115: #eq^#(#0(), #s(@y)) -> c_112()
    , 116: #eq^#(#s(@x), #0()) -> c_113()
    , 117: #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
    , 118: sub'#2^#(nil(), @r, @x, @xs) -> c_30()
    , 119: diff^#(@x, @y, @r) ->
           c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                +^#(+(@x, @y), @r),
                +^#(@x, @y),
                diff#1^#(#less(-(-(@x, @y), @r), #0())),
                #less^#(-(-(@x, @y), @r), #0()),
                -^#(-(@x, @y), @r),
                -^#(@x, @y))
    , 120: compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
    , 121: compare#5^#(#true(), @x, @y) ->
           c_35(-^#(#0(), #pos(#s(#0()))))
    , 122: compare#5^#(#false(), @x, @y) ->
           c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
    , 123: compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
    , 124: compare#6^#(#false()) -> c_54(#abs^#(#0()))
    , 125: compare#4^#(#true(), @r, @x, @y) ->
           c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
    , 126: compare#4^#(#false(), @r, @x, @y) -> c_56()
    , 127: sub'#1^#(nil(), @b2, @r) -> c_40()
    , 128: add'#1^#(nil(), @b2, @r) -> c_44()
    , 129: add'#2^#(nil(), @r, @x, @xs) -> c_46()
    , 130: compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
    , 131: #natsub^#(@x, #0()) -> c_66()
    , 132: #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
    , 133: #natdiv^#(#0(), #0()) -> c_68()
    , 134: #natdiv^#(#s(@x), #s(@y)) ->
           c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
    , 135: #pred^#(#neg(#s(@x))) -> c_145()
    , 136: #pred^#(#pos(#s(#0()))) -> c_146()
    , 137: #pred^#(#pos(#s(#s(@x)))) -> c_147()
    , 138: #pred^#(#0()) -> c_148()
    , 139: #succ^#(#neg(#s(#0()))) -> c_132()
    , 140: #succ^#(#neg(#s(#s(@x)))) -> c_133()
    , 141: #succ^#(#pos(#s(@x))) -> c_134()
    , 142: #succ^#(#0()) -> c_135()
    , 143: #and^#(#true(), #true()) -> c_78()
    , 144: #and^#(#true(), #false()) -> c_79()
    , 145: #and^#(#false(), #true()) -> c_80()
    , 146: #and^#(#false(), #false()) -> c_81()
    , 147: #natmult^#(#0(), @y) -> c_115()
    , 148: #natmult^#(#s(@x), @y) ->
           c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }

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

Strict DPs:
  { sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , sum^#(@x, @y, @r) ->
    c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak DPs:
  { -^#(@x, @y) -> c_1(#sub^#(@x, @y))
  , #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
  , #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
  , #sub^#(@x, #0()) -> c_122()
  , sub#1^#(tuple#2(@b, @_@1)) -> c_12()
  , #abs^#(#neg(@x)) -> c_62()
  , #abs^#(#pos(@x)) -> c_63()
  , #abs^#(#0()) -> c_64()
  , #abs^#(#s(@x)) -> c_65()
  , diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
  , diff#1^#(#false()) -> c_4(#abs^#(#0()))
  , mult#3^#(#false(), @b2, @zs) -> c_43()
  , #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
  , div^#(@x, @y) -> c_6(#div^#(@x, @y))
  , #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #0()) -> c_138()
  , #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #0()) -> c_141()
  , #div^#(#0(), #neg(@y)) -> c_142()
  , #div^#(#0(), #pos(@y)) -> c_143()
  , #div^#(#0(), #0()) -> c_144()
  , bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
  , +^#(@x, @y) -> c_21(#add^#(@x, @y))
  , *^#(@x, @y) -> c_24(#mult^#(@x, @y))
  , sum#1^#(@s) ->
    c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
  , mod^#(@x, @y) ->
    c_10(-^#(@x, *(@x, div(@x, @y))),
         *^#(@x, div(@x, @y)),
         div^#(@x, @y))
  , #less^#(@x, @y) ->
    c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #greater^#(@x, @y) ->
    c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_70()
  , #ckgt^#(#LT()) -> c_71()
  , #ckgt^#(#GT()) -> c_72()
  , #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
  , #compare^#(#neg(@x), #pos(@y)) -> c_83()
  , #compare^#(#neg(@x), #0()) -> c_84()
  , #compare^#(#pos(@x), #neg(@y)) -> c_85()
  , #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_87()
  , #compare^#(#0(), #neg(@y)) -> c_88()
  , #compare^#(#0(), #pos(@y)) -> c_89()
  , #compare^#(#0(), #0()) -> c_90()
  , #compare^#(#0(), #s(@y)) -> c_91()
  , #compare^#(#s(@x), #0()) -> c_92()
  , #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
  , mult#1^#(nil(), @b2) -> c_49()
  , sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
  , sum#2^#(#false(), @s) ->
    c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
         #equal^#(@s, #pos(#s(#0()))))
  , sum#3^#(#true(), @s) ->
    c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
  , sum#3^#(#false(), @s) ->
    c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
         #equal^#(@s, #pos(#s(#s(#0())))))
  , #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_77()
  , sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
  , sum#4^#(#false()) ->
    c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
  , #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #0()) -> c_125()
  , #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #0()) -> c_128()
  , #mult^#(#0(), #neg(@y)) -> c_129()
  , #mult^#(#0(), #pos(@y)) -> c_130()
  , #mult^#(#0(), #0()) -> c_131()
  , sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
  , sub'#5^#(#false(), @z, @zs) -> c_26()
  , #cklt^#(#EQ()) -> c_117()
  , #cklt^#(#LT()) -> c_118()
  , #cklt^#(#GT()) -> c_119()
  , sub'#4^#(tuple#2(@zs, @s), @z) ->
    c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
         #equal^#(@s, #pos(#s(#0()))))
  , #eq^#(nil(), nil()) -> c_94()
  , #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
  , #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
  , #eq^#(#neg(@x), #pos(@y)) -> c_98()
  , #eq^#(#neg(@x), #0()) -> c_99()
  , #eq^#(#pos(@x), #neg(@y)) -> c_100()
  , #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_102()
  , #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
  , #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_106()
  , #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #neg(@y)) -> c_109()
  , #eq^#(#0(), #pos(@y)) -> c_110()
  , #eq^#(#0(), #0()) -> c_111()
  , #eq^#(#0(), #s(@y)) -> c_112()
  , #eq^#(#s(@x), #0()) -> c_113()
  , #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
  , sub'#2^#(nil(), @r, @x, @xs) -> c_30()
  , diff^#(@x, @y, @r) ->
    c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
         +^#(+(@x, @y), @r),
         +^#(@x, @y),
         diff#1^#(#less(-(-(@x, @y), @r), #0())),
         #less^#(-(-(@x, @y), @r), #0()),
         -^#(-(@x, @y), @r),
         -^#(@x, @y))
  , compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
  , compare#3^#(@r, @x, @y) ->
    c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
  , compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
  , compare#5^#(#false(), @x, @y) ->
    c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
  , compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
  , compare#6^#(#false()) -> c_54(#abs^#(#0()))
  , compare#4^#(#true(), @r, @x, @y) ->
    c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
  , compare#4^#(#false(), @r, @x, @y) -> c_56()
  , sub'#1^#(nil(), @b2, @r) -> c_40()
  , add'#1^#(nil(), @b2, @r) -> c_44()
  , add'#2^#(nil(), @r, @x, @xs) -> c_46()
  , compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
  , #natsub^#(@x, #0()) -> c_66()
  , #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
  , #natdiv^#(#0(), #0()) -> c_68()
  , #natdiv^#(#s(@x), #s(@y)) ->
    c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
  , #pred^#(#neg(#s(@x))) -> c_145()
  , #pred^#(#pos(#s(#0()))) -> c_146()
  , #pred^#(#pos(#s(#s(@x)))) -> c_147()
  , #pred^#(#0()) -> c_148()
  , #succ^#(#neg(#s(#0()))) -> c_132()
  , #succ^#(#neg(#s(#s(@x)))) -> c_133()
  , #succ^#(#pos(#s(@x))) -> c_134()
  , #succ^#(#0()) -> c_135()
  , #and^#(#true(), #true()) -> c_78()
  , #and^#(#true(), #false()) -> c_79()
  , #and^#(#false(), #true()) -> c_80()
  , #and^#(#false(), #false()) -> c_81()
  , #natmult^#(#0(), @y) -> c_115()
  , #natmult^#(#s(@x), @y) ->
    c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We estimate the number of application of {7} by applications of
Pre({7}) = {22}. Here rules are labeled as follows:

  DPs:
    { 1: sub^#(@b1, @b2) ->
         c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
             sub'^#(@b1, @b2, #abs(#0())),
             #abs^#(#0()))
    , 2: sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
    , 3: mult#2^#(@zs, @b2, @x) ->
         c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
             #equal^#(@x, #pos(#s(#0()))))
    , 4: mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
    , 5: bitToInt'#1^#(::(@x, @xs), @n) ->
         c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
             *^#(@x, @n),
             bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
             *^#(@n, #pos(#s(#s(#0())))))
    , 6: bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
    , 7: sum^#(@x, @y, @r) ->
         c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
    , 8: mult3^#(@b1, @b2, @b3) ->
         c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
    , 9: mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
    , 10: leq^#(@b1, @b2) ->
          c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
               compare^#(@b1, @b2))
    , 11: compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
    , 12: mult#1^#(::(@x, @xs), @b2) ->
          c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               #abs^#(#0()),
               mult^#(@xs, @b2))
    , 13: bitToInt^#(@b) ->
          c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
    , 14: sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
    , 15: sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
    , 16: compare#2^#(::(@y, @ys), @x, @xs) ->
          c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
    , 17: add^#(@b1, @b2) ->
          c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
    , 18: add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
    , 19: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_39(add'^#(@xs, @ys, @r'))
    , 20: sub'#1^#(::(@x, @xs), @b2, @r) ->
          c_41(sub'#2^#(@b2, @r, @x, @xs))
    , 21: add'#1^#(::(@x, @xs), @b2, @r) ->
          c_45(add'#2^#(@b2, @r, @x, @xs))
    , 22: add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
    , 23: compare#1^#(::(@x, @xs), @b2) ->
          c_61(compare#2^#(@b2, @x, @xs))
    , 24: -^#(@x, @y) -> c_1(#sub^#(@x, @y))
    , 25: #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
    , 26: #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
    , 27: #sub^#(@x, #0()) -> c_122()
    , 28: sub#1^#(tuple#2(@b, @_@1)) -> c_12()
    , 29: #abs^#(#neg(@x)) -> c_62()
    , 30: #abs^#(#pos(@x)) -> c_63()
    , 31: #abs^#(#0()) -> c_64()
    , 32: #abs^#(#s(@x)) -> c_65()
    , 33: diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
    , 34: diff#1^#(#false()) -> c_4(#abs^#(#0()))
    , 35: mult#3^#(#false(), @b2, @zs) -> c_43()
    , 36: #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
    , 37: div^#(@x, @y) -> c_6(#div^#(@x, @y))
    , 38: #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
    , 39: #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
    , 40: #div^#(#neg(@x), #0()) -> c_138()
    , 41: #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
    , 42: #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
    , 43: #div^#(#pos(@x), #0()) -> c_141()
    , 44: #div^#(#0(), #neg(@y)) -> c_142()
    , 45: #div^#(#0(), #pos(@y)) -> c_143()
    , 46: #div^#(#0(), #0()) -> c_144()
    , 47: bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
    , 48: +^#(@x, @y) -> c_21(#add^#(@x, @y))
    , 49: *^#(@x, @y) -> c_24(#mult^#(@x, @y))
    , 50: sum#1^#(@s) ->
          c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
    , 51: mod^#(@x, @y) ->
          c_10(-^#(@x, *(@x, div(@x, @y))),
               *^#(@x, div(@x, @y)),
               div^#(@x, @y))
    , 52: #less^#(@x, @y) ->
          c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 53: #greater^#(@x, @y) ->
          c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
    , 54: #ckgt^#(#EQ()) -> c_70()
    , 55: #ckgt^#(#LT()) -> c_71()
    , 56: #ckgt^#(#GT()) -> c_72()
    , 57: #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
    , 58: #compare^#(#neg(@x), #pos(@y)) -> c_83()
    , 59: #compare^#(#neg(@x), #0()) -> c_84()
    , 60: #compare^#(#pos(@x), #neg(@y)) -> c_85()
    , 61: #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
    , 62: #compare^#(#pos(@x), #0()) -> c_87()
    , 63: #compare^#(#0(), #neg(@y)) -> c_88()
    , 64: #compare^#(#0(), #pos(@y)) -> c_89()
    , 65: #compare^#(#0(), #0()) -> c_90()
    , 66: #compare^#(#0(), #s(@y)) -> c_91()
    , 67: #compare^#(#s(@x), #0()) -> c_92()
    , 68: #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
    , 69: mult#1^#(nil(), @b2) -> c_49()
    , 70: sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
    , 71: sum#2^#(#false(), @s) ->
          c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
               #equal^#(@s, #pos(#s(#0()))))
    , 72: sum#3^#(#true(), @s) ->
          c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
    , 73: sum#3^#(#false(), @s) ->
          c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
               #equal^#(@s, #pos(#s(#s(#0())))))
    , 74: #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
    , 75: #add^#(#neg(#s(#s(@x))), @y) ->
          c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 76: #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
    , 77: #add^#(#pos(#s(#s(@x))), @y) ->
          c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
    , 78: #add^#(#0(), @y) -> c_77()
    , 79: sum#4^#(#true()) ->
          c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
    , 80: sum#4^#(#false()) ->
          c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
    , 81: #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
    , 82: #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
    , 83: #mult^#(#neg(@x), #0()) -> c_125()
    , 84: #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
    , 85: #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
    , 86: #mult^#(#pos(@x), #0()) -> c_128()
    , 87: #mult^#(#0(), #neg(@y)) -> c_129()
    , 88: #mult^#(#0(), #pos(@y)) -> c_130()
    , 89: #mult^#(#0(), #0()) -> c_131()
    , 90: sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
    , 91: sub'#5^#(#false(), @z, @zs) -> c_26()
    , 92: #cklt^#(#EQ()) -> c_117()
    , 93: #cklt^#(#LT()) -> c_118()
    , 94: #cklt^#(#GT()) -> c_119()
    , 95: sub'#4^#(tuple#2(@zs, @s), @z) ->
          c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
               #equal^#(@s, #pos(#s(#0()))))
    , 96: #eq^#(nil(), nil()) -> c_94()
    , 97: #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
    , 98: #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
    , 99: #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
    , 100: #eq^#(#neg(@x), #pos(@y)) -> c_98()
    , 101: #eq^#(#neg(@x), #0()) -> c_99()
    , 102: #eq^#(#pos(@x), #neg(@y)) -> c_100()
    , 103: #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
    , 104: #eq^#(#pos(@x), #0()) -> c_102()
    , 105: #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
    , 106: #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
           c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 107: #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
    , 108: #eq^#(::(@x_1, @x_2), nil()) -> c_106()
    , 109: #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
    , 110: #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
           c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
                 #eq^#(@x_1, @y_1),
                 #eq^#(@x_2, @y_2))
    , 111: #eq^#(#0(), #neg(@y)) -> c_109()
    , 112: #eq^#(#0(), #pos(@y)) -> c_110()
    , 113: #eq^#(#0(), #0()) -> c_111()
    , 114: #eq^#(#0(), #s(@y)) -> c_112()
    , 115: #eq^#(#s(@x), #0()) -> c_113()
    , 116: #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
    , 117: sub'#2^#(nil(), @r, @x, @xs) -> c_30()
    , 118: diff^#(@x, @y, @r) ->
           c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                +^#(+(@x, @y), @r),
                +^#(@x, @y),
                diff#1^#(#less(-(-(@x, @y), @r), #0())),
                #less^#(-(-(@x, @y), @r), #0()),
                -^#(-(@x, @y), @r),
                -^#(@x, @y))
    , 119: compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
    , 120: compare#3^#(@r, @x, @y) ->
           c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
    , 121: compare#5^#(#true(), @x, @y) ->
           c_35(-^#(#0(), #pos(#s(#0()))))
    , 122: compare#5^#(#false(), @x, @y) ->
           c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
    , 123: compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
    , 124: compare#6^#(#false()) -> c_54(#abs^#(#0()))
    , 125: compare#4^#(#true(), @r, @x, @y) ->
           c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
    , 126: compare#4^#(#false(), @r, @x, @y) -> c_56()
    , 127: sub'#1^#(nil(), @b2, @r) -> c_40()
    , 128: add'#1^#(nil(), @b2, @r) -> c_44()
    , 129: add'#2^#(nil(), @r, @x, @xs) -> c_46()
    , 130: compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
    , 131: #natsub^#(@x, #0()) -> c_66()
    , 132: #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
    , 133: #natdiv^#(#0(), #0()) -> c_68()
    , 134: #natdiv^#(#s(@x), #s(@y)) ->
           c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
    , 135: #pred^#(#neg(#s(@x))) -> c_145()
    , 136: #pred^#(#pos(#s(#0()))) -> c_146()
    , 137: #pred^#(#pos(#s(#s(@x)))) -> c_147()
    , 138: #pred^#(#0()) -> c_148()
    , 139: #succ^#(#neg(#s(#0()))) -> c_132()
    , 140: #succ^#(#neg(#s(#s(@x)))) -> c_133()
    , 141: #succ^#(#pos(#s(@x))) -> c_134()
    , 142: #succ^#(#0()) -> c_135()
    , 143: #and^#(#true(), #true()) -> c_78()
    , 144: #and^#(#true(), #false()) -> c_79()
    , 145: #and^#(#false(), #true()) -> c_80()
    , 146: #and^#(#false(), #false()) -> c_81()
    , 147: #natmult^#(#0(), @y) -> c_115()
    , 148: #natmult^#(#s(@x), @y) ->
           c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }

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

Strict DPs:
  { sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak DPs:
  { -^#(@x, @y) -> c_1(#sub^#(@x, @y))
  , #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
  , #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
  , #sub^#(@x, #0()) -> c_122()
  , sub#1^#(tuple#2(@b, @_@1)) -> c_12()
  , #abs^#(#neg(@x)) -> c_62()
  , #abs^#(#pos(@x)) -> c_63()
  , #abs^#(#0()) -> c_64()
  , #abs^#(#s(@x)) -> c_65()
  , diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
  , diff#1^#(#false()) -> c_4(#abs^#(#0()))
  , mult#3^#(#false(), @b2, @zs) -> c_43()
  , #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
  , div^#(@x, @y) -> c_6(#div^#(@x, @y))
  , #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
  , #div^#(#neg(@x), #0()) -> c_138()
  , #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
  , #div^#(#pos(@x), #0()) -> c_141()
  , #div^#(#0(), #neg(@y)) -> c_142()
  , #div^#(#0(), #pos(@y)) -> c_143()
  , #div^#(#0(), #0()) -> c_144()
  , bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
  , +^#(@x, @y) -> c_21(#add^#(@x, @y))
  , *^#(@x, @y) -> c_24(#mult^#(@x, @y))
  , sum^#(@x, @y, @r) ->
    c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
  , sum#1^#(@s) ->
    c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
  , mod^#(@x, @y) ->
    c_10(-^#(@x, *(@x, div(@x, @y))),
         *^#(@x, div(@x, @y)),
         div^#(@x, @y))
  , #less^#(@x, @y) ->
    c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #greater^#(@x, @y) ->
    c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
  , #ckgt^#(#EQ()) -> c_70()
  , #ckgt^#(#LT()) -> c_71()
  , #ckgt^#(#GT()) -> c_72()
  , #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
  , #compare^#(#neg(@x), #pos(@y)) -> c_83()
  , #compare^#(#neg(@x), #0()) -> c_84()
  , #compare^#(#pos(@x), #neg(@y)) -> c_85()
  , #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
  , #compare^#(#pos(@x), #0()) -> c_87()
  , #compare^#(#0(), #neg(@y)) -> c_88()
  , #compare^#(#0(), #pos(@y)) -> c_89()
  , #compare^#(#0(), #0()) -> c_90()
  , #compare^#(#0(), #s(@y)) -> c_91()
  , #compare^#(#s(@x), #0()) -> c_92()
  , #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
  , mult#1^#(nil(), @b2) -> c_49()
  , sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
  , sum#2^#(#false(), @s) ->
    c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
         #equal^#(@s, #pos(#s(#0()))))
  , sum#3^#(#true(), @s) ->
    c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
  , sum#3^#(#false(), @s) ->
    c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
         #equal^#(@s, #pos(#s(#s(#0())))))
  , #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
  , #add^#(#neg(#s(#s(@x))), @y) ->
    c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
  , #add^#(#pos(#s(#s(@x))), @y) ->
    c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
  , #add^#(#0(), @y) -> c_77()
  , sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
  , sum#4^#(#false()) ->
    c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
  , #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
  , #mult^#(#neg(@x), #0()) -> c_125()
  , #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
  , #mult^#(#pos(@x), #0()) -> c_128()
  , #mult^#(#0(), #neg(@y)) -> c_129()
  , #mult^#(#0(), #pos(@y)) -> c_130()
  , #mult^#(#0(), #0()) -> c_131()
  , sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
  , sub'#5^#(#false(), @z, @zs) -> c_26()
  , #cklt^#(#EQ()) -> c_117()
  , #cklt^#(#LT()) -> c_118()
  , #cklt^#(#GT()) -> c_119()
  , sub'#4^#(tuple#2(@zs, @s), @z) ->
    c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
         #equal^#(@s, #pos(#s(#0()))))
  , #eq^#(nil(), nil()) -> c_94()
  , #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
  , #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
  , #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
  , #eq^#(#neg(@x), #pos(@y)) -> c_98()
  , #eq^#(#neg(@x), #0()) -> c_99()
  , #eq^#(#pos(@x), #neg(@y)) -> c_100()
  , #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
  , #eq^#(#pos(@x), #0()) -> c_102()
  , #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
  , #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
  , #eq^#(::(@x_1, @x_2), nil()) -> c_106()
  , #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
  , #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
          #eq^#(@x_1, @y_1),
          #eq^#(@x_2, @y_2))
  , #eq^#(#0(), #neg(@y)) -> c_109()
  , #eq^#(#0(), #pos(@y)) -> c_110()
  , #eq^#(#0(), #0()) -> c_111()
  , #eq^#(#0(), #s(@y)) -> c_112()
  , #eq^#(#s(@x), #0()) -> c_113()
  , #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
  , sub'#2^#(nil(), @r, @x, @xs) -> c_30()
  , diff^#(@x, @y, @r) ->
    c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
         +^#(+(@x, @y), @r),
         +^#(@x, @y),
         diff#1^#(#less(-(-(@x, @y), @r), #0())),
         #less^#(-(-(@x, @y), @r), #0()),
         -^#(-(@x, @y), @r),
         -^#(@x, @y))
  , compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
  , compare#3^#(@r, @x, @y) ->
    c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
  , compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
  , compare#5^#(#false(), @x, @y) ->
    c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
  , compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
  , compare#6^#(#false()) -> c_54(#abs^#(#0()))
  , compare#4^#(#true(), @r, @x, @y) ->
    c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
  , compare#4^#(#false(), @r, @x, @y) -> c_56()
  , sub'#1^#(nil(), @b2, @r) -> c_40()
  , add'#1^#(nil(), @b2, @r) -> c_44()
  , add'#2^#(nil(), @r, @x, @xs) -> c_46()
  , compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
  , #natsub^#(@x, #0()) -> c_66()
  , #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
  , #natdiv^#(#0(), #0()) -> c_68()
  , #natdiv^#(#s(@x), #s(@y)) ->
    c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
  , #pred^#(#neg(#s(@x))) -> c_145()
  , #pred^#(#pos(#s(#0()))) -> c_146()
  , #pred^#(#pos(#s(#s(@x)))) -> c_147()
  , #pred^#(#0()) -> c_148()
  , #succ^#(#neg(#s(#0()))) -> c_132()
  , #succ^#(#neg(#s(#s(@x)))) -> c_133()
  , #succ^#(#pos(#s(@x))) -> c_134()
  , #succ^#(#0()) -> c_135()
  , #and^#(#true(), #true()) -> c_78()
  , #and^#(#true(), #false()) -> c_79()
  , #and^#(#false(), #true()) -> c_80()
  , #and^#(#false(), #false()) -> c_81()
  , #natmult^#(#0(), @y) -> c_115()
  , #natmult^#(#s(@x), @y) ->
    c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

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

{ -^#(@x, @y) -> c_1(#sub^#(@x, @y))
, #sub^#(@x, #neg(@y)) -> c_120(#add^#(@x, #pos(@y)))
, #sub^#(@x, #pos(@y)) -> c_121(#add^#(@x, #neg(@y)))
, #sub^#(@x, #0()) -> c_122()
, sub#1^#(tuple#2(@b, @_@1)) -> c_12()
, #abs^#(#neg(@x)) -> c_62()
, #abs^#(#pos(@x)) -> c_63()
, #abs^#(#0()) -> c_64()
, #abs^#(#s(@x)) -> c_65()
, diff#1^#(#true()) -> c_3(#abs^#(#pos(#s(#0()))))
, diff#1^#(#false()) -> c_4(#abs^#(#0()))
, mult#3^#(#false(), @b2, @zs) -> c_43()
, #equal^#(@x, @y) -> c_29(#eq^#(@x, @y))
, div^#(@x, @y) -> c_6(#div^#(@x, @y))
, #div^#(#neg(@x), #neg(@y)) -> c_136(#natdiv^#(@x, @y))
, #div^#(#neg(@x), #pos(@y)) -> c_137(#natdiv^#(@x, @y))
, #div^#(#neg(@x), #0()) -> c_138()
, #div^#(#pos(@x), #neg(@y)) -> c_139(#natdiv^#(@x, @y))
, #div^#(#pos(@x), #pos(@y)) -> c_140(#natdiv^#(@x, @y))
, #div^#(#pos(@x), #0()) -> c_141()
, #div^#(#0(), #neg(@y)) -> c_142()
, #div^#(#0(), #pos(@y)) -> c_143()
, #div^#(#0(), #0()) -> c_144()
, bitToInt'#1^#(nil(), @n) -> c_7(#abs^#(#0()))
, +^#(@x, @y) -> c_21(#add^#(@x, @y))
, *^#(@x, @y) -> c_24(#mult^#(@x, @y))
, sum^#(@x, @y, @r) ->
  c_9(sum#1^#(+(+(@x, @y), @r)), +^#(+(@x, @y), @r), +^#(@x, @y))
, sum#1^#(@s) ->
  c_20(sum#2^#(#equal(@s, #0()), @s), #equal^#(@s, #0()))
, mod^#(@x, @y) ->
  c_10(-^#(@x, *(@x, div(@x, @y))),
       *^#(@x, div(@x, @y)),
       div^#(@x, @y))
, #less^#(@x, @y) ->
  c_27(#cklt^#(#compare(@x, @y)), #compare^#(@x, @y))
, #greater^#(@x, @y) ->
  c_14(#ckgt^#(#compare(@x, @y)), #compare^#(@x, @y))
, #ckgt^#(#EQ()) -> c_70()
, #ckgt^#(#LT()) -> c_71()
, #ckgt^#(#GT()) -> c_72()
, #compare^#(#neg(@x), #neg(@y)) -> c_82(#compare^#(@y, @x))
, #compare^#(#neg(@x), #pos(@y)) -> c_83()
, #compare^#(#neg(@x), #0()) -> c_84()
, #compare^#(#pos(@x), #neg(@y)) -> c_85()
, #compare^#(#pos(@x), #pos(@y)) -> c_86(#compare^#(@x, @y))
, #compare^#(#pos(@x), #0()) -> c_87()
, #compare^#(#0(), #neg(@y)) -> c_88()
, #compare^#(#0(), #pos(@y)) -> c_89()
, #compare^#(#0(), #0()) -> c_90()
, #compare^#(#0(), #s(@y)) -> c_91()
, #compare^#(#s(@x), #0()) -> c_92()
, #compare^#(#s(@x), #s(@y)) -> c_93(#compare^#(@x, @y))
, mult#1^#(nil(), @b2) -> c_49()
, sum#2^#(#true(), @s) -> c_18(#abs^#(#0()), #abs^#(#0()))
, sum#2^#(#false(), @s) ->
  c_19(sum#3^#(#equal(@s, #pos(#s(#0()))), @s),
       #equal^#(@s, #pos(#s(#0()))))
, sum#3^#(#true(), @s) ->
  c_57(#abs^#(#pos(#s(#0()))), #abs^#(#0()))
, sum#3^#(#false(), @s) ->
  c_58(sum#4^#(#equal(@s, #pos(#s(#s(#0()))))),
       #equal^#(@s, #pos(#s(#s(#0())))))
, #add^#(#neg(#s(#0())), @y) -> c_73(#pred^#(@y))
, #add^#(#neg(#s(#s(@x))), @y) ->
  c_74(#pred^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
, #add^#(#pos(#s(#0())), @y) -> c_75(#succ^#(@y))
, #add^#(#pos(#s(#s(@x))), @y) ->
  c_76(#succ^#(#add(#pos(#s(@x)), @y)), #add^#(#pos(#s(@x)), @y))
, #add^#(#0(), @y) -> c_77()
, sum#4^#(#true()) -> c_22(#abs^#(#0()), #abs^#(#pos(#s(#0()))))
, sum#4^#(#false()) ->
  c_23(#abs^#(#pos(#s(#0()))), #abs^#(#pos(#s(#0()))))
, #mult^#(#neg(@x), #neg(@y)) -> c_123(#natmult^#(@x, @y))
, #mult^#(#neg(@x), #pos(@y)) -> c_124(#natmult^#(@x, @y))
, #mult^#(#neg(@x), #0()) -> c_125()
, #mult^#(#pos(@x), #neg(@y)) -> c_126(#natmult^#(@x, @y))
, #mult^#(#pos(@x), #pos(@y)) -> c_127(#natmult^#(@x, @y))
, #mult^#(#pos(@x), #0()) -> c_128()
, #mult^#(#0(), #neg(@y)) -> c_129()
, #mult^#(#0(), #pos(@y)) -> c_130()
, #mult^#(#0(), #0()) -> c_131()
, sub'#5^#(#true(), @z, @zs) -> c_25(#abs^#(#0()))
, sub'#5^#(#false(), @z, @zs) -> c_26()
, #cklt^#(#EQ()) -> c_117()
, #cklt^#(#LT()) -> c_118()
, #cklt^#(#GT()) -> c_119()
, sub'#4^#(tuple#2(@zs, @s), @z) ->
  c_34(sub'#5^#(#equal(@s, #pos(#s(#0()))), @z, @zs),
       #equal^#(@s, #pos(#s(#0()))))
, #eq^#(nil(), nil()) -> c_94()
, #eq^#(nil(), tuple#2(@y_1, @y_2)) -> c_95()
, #eq^#(nil(), ::(@y_1, @y_2)) -> c_96()
, #eq^#(#neg(@x), #neg(@y)) -> c_97(#eq^#(@x, @y))
, #eq^#(#neg(@x), #pos(@y)) -> c_98()
, #eq^#(#neg(@x), #0()) -> c_99()
, #eq^#(#pos(@x), #neg(@y)) -> c_100()
, #eq^#(#pos(@x), #pos(@y)) -> c_101(#eq^#(@x, @y))
, #eq^#(#pos(@x), #0()) -> c_102()
, #eq^#(tuple#2(@x_1, @x_2), nil()) -> c_103()
, #eq^#(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
  c_104(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
        #eq^#(@x_1, @y_1),
        #eq^#(@x_2, @y_2))
, #eq^#(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> c_105()
, #eq^#(::(@x_1, @x_2), nil()) -> c_106()
, #eq^#(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> c_107()
, #eq^#(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
  c_108(#and^#(#eq(@x_1, @y_1), #eq(@x_2, @y_2)),
        #eq^#(@x_1, @y_1),
        #eq^#(@x_2, @y_2))
, #eq^#(#0(), #neg(@y)) -> c_109()
, #eq^#(#0(), #pos(@y)) -> c_110()
, #eq^#(#0(), #0()) -> c_111()
, #eq^#(#0(), #s(@y)) -> c_112()
, #eq^#(#s(@x), #0()) -> c_113()
, #eq^#(#s(@x), #s(@y)) -> c_114(#eq^#(@x, @y))
, sub'#2^#(nil(), @r, @x, @xs) -> c_30()
, diff^#(@x, @y, @r) ->
  c_48(mod^#(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
       +^#(+(@x, @y), @r),
       +^#(@x, @y),
       diff#1^#(#less(-(-(@x, @y), @r), #0())),
       #less^#(-(-(@x, @y), @r), #0()),
       -^#(-(@x, @y), @r),
       -^#(@x, @y))
, compare#2^#(nil(), @x, @xs) -> c_32(#abs^#(#0()))
, compare#3^#(@r, @x, @y) ->
  c_37(compare#4^#(#equal(@r, #0()), @r, @x, @y), #equal^#(@r, #0()))
, compare#5^#(#true(), @x, @y) -> c_35(-^#(#0(), #pos(#s(#0()))))
, compare#5^#(#false(), @x, @y) ->
  c_36(compare#6^#(#greater(@x, @y)), #greater^#(@x, @y))
, compare#6^#(#true()) -> c_53(#abs^#(#pos(#s(#0()))))
, compare#6^#(#false()) -> c_54(#abs^#(#0()))
, compare#4^#(#true(), @r, @x, @y) ->
  c_55(compare#5^#(#less(@x, @y), @x, @y), #less^#(@x, @y))
, compare#4^#(#false(), @r, @x, @y) -> c_56()
, sub'#1^#(nil(), @b2, @r) -> c_40()
, add'#1^#(nil(), @b2, @r) -> c_44()
, add'#2^#(nil(), @r, @x, @xs) -> c_46()
, compare#1^#(nil(), @b2) -> c_60(#abs^#(#0()))
, #natsub^#(@x, #0()) -> c_66()
, #natsub^#(#s(@x), #s(@y)) -> c_67(#natsub^#(@x, @y))
, #natdiv^#(#0(), #0()) -> c_68()
, #natdiv^#(#s(@x), #s(@y)) ->
  c_69(#natdiv^#(#natsub(@x, @y), #s(@y)), #natsub^#(@x, @y))
, #pred^#(#neg(#s(@x))) -> c_145()
, #pred^#(#pos(#s(#0()))) -> c_146()
, #pred^#(#pos(#s(#s(@x)))) -> c_147()
, #pred^#(#0()) -> c_148()
, #succ^#(#neg(#s(#0()))) -> c_132()
, #succ^#(#neg(#s(#s(@x)))) -> c_133()
, #succ^#(#pos(#s(@x))) -> c_134()
, #succ^#(#0()) -> c_135()
, #and^#(#true(), #true()) -> c_78()
, #and^#(#true(), #false()) -> c_79()
, #and^#(#false(), #true()) -> c_80()
, #and^#(#false(), #false()) -> c_81()
, #natmult^#(#0(), @y) -> c_115()
, #natmult^#(#s(@x), @y) ->
  c_116(#add^#(#pos(@y), #natmult(@x, @y)), #natmult^#(@x, @y)) }

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

Strict DPs:
  { sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , sub'^#(@b1, @b2, @r) -> c_51(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , mult#3^#(#true(), @b2, @zs) -> c_42(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , bitToInt'^#(@b, @n) -> c_15(bitToInt'#1^#(@b, @n))
  , mult3^#(@b1, @b2, @b3) ->
    c_11(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_16(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_52(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'^#(@b1, @b2, @r) -> c_59(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_39(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_41(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_45(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_61(compare#2^#(@b2, @x, @xs)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

Due to missing edges in the dependency-graph, the right-hand sides
of following rules could be simplified:

  { sub^#(@b1, @b2) ->
    c_2(sub#1^#(sub'(@b1, @b2, #abs(#0()))),
        sub'^#(@b1, @b2, #abs(#0())),
        #abs^#(#0()))
  , mult#2^#(@zs, @b2, @x) ->
    c_5(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs),
        #equal^#(@x, #pos(#s(#0()))))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_8(+^#(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0())))))),
        *^#(@x, @n),
        bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))),
        *^#(@n, #pos(#s(#s(#0())))))
  , leq^#(@b1, @b2) ->
    c_13(#less^#(compare(@b1, @b2), #pos(#s(#0()))),
         compare^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_50(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         #abs^#(#0()),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) ->
    c_17(bitToInt'^#(@b, #abs(#pos(#s(#0())))), #abs^#(#pos(#s(#0()))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_28(sub'#4^#(sub'(@xs, @ys, @r'), @z), sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_31(sub'#3^#(diff(@x, @y, @r), @xs, @ys), diff^#(@x, @y, @r))
  , compare#2^#(::(@y, @ys), @x, @xs) ->
    c_33(compare#3^#(compare(@xs, @ys), @x, @y), compare^#(@xs, @ys))
  , add^#(@b1, @b2) ->
    c_38(add'^#(@b1, @b2, #abs(#0())), #abs^#(#0()))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_47(add'#3^#(sum(@x, @y, @r), @xs, @ys), sum^#(@x, @y, @r)) }

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

Strict DPs:
  { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
  , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
  , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
  , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
  , mult3^#(@b1, @b2, @b3) ->
    c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) -> c_9(compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_13(sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
  , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
  , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
  , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_18(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_19(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_20(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_22(compare#2^#(@b2, @x, @xs)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , sub(@b1, @b2) -> sub#1(sub'(@b1, @b2, #abs(#0())))
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #ckgt(#EQ()) -> #false()
  , #ckgt(#LT()) -> #false()
  , #ckgt(#GT()) -> #true()
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , bitToInt'#1(nil(), @n) -> #abs(#0())
  , bitToInt'#1(::(@x, @xs), @n) ->
    +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0()))))))
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , mult3(@b1, @b2, @b3) -> mult(mult(@b1, @b2), @b2)
  , sub#1(tuple#2(@b, @_@1)) -> @b
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , leq(@b1, @b2) -> #less(compare(@b1, @b2), #pos(#s(#0())))
  , #greater(@x, @y) -> #ckgt(#compare(@x, @y))
  , bitToInt'(@b, @n) -> bitToInt'#1(@b, @n)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , bitToInt(@b) -> bitToInt'(@b, #abs(#pos(#s(#0()))))
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , sub'#5(#true(), @z, @zs) -> ::(#abs(#0()), @zs)
  , sub'#5(#false(), @z, @zs) -> ::(@z, @zs)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , sub'#3(tuple#2(@z, @r'), @xs, @ys) ->
    sub'#4(sub'(@xs, @ys, @r'), @z)
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , sub'#2(nil(), @r, @x, @xs) -> tuple#2(nil(), @r)
  , sub'#2(::(@y, @ys), @r, @x, @xs) ->
    sub'#3(diff(@x, @y, @r), @xs, @ys)
  , compare#2(nil(), @x, @xs) -> #abs(#0())
  , compare#2(::(@y, @ys), @x, @xs) ->
    compare#3(compare(@xs, @ys), @x, @y)
  , sub'#4(tuple#2(@zs, @s), @z) ->
    tuple#2(sub'#5(#equal(@s, #pos(#s(#0()))), @z, @zs), @s)
  , compare#5(#true(), @x, @y) -> -(#0(), #pos(#s(#0())))
  , compare#5(#false(), @x, @y) -> compare#6(#greater(@x, @y))
  , compare#3(@r, @x, @y) -> compare#4(#equal(@r, #0()), @r, @x, @y)
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , sub'#1(nil(), @b2, @r) -> tuple#2(nil(), @r)
  , sub'#1(::(@x, @xs), @b2, @r) -> sub'#2(@b2, @r, @x, @xs)
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sub'(@b1, @b2, @r) -> sub'#1(@b1, @b2, @r)
  , compare(@b1, @b2) -> compare#1(@b1, @b2)
  , compare#6(#true()) -> #abs(#pos(#s(#0())))
  , compare#6(#false()) -> #abs(#0())
  , compare#4(#true(), @r, @x, @y) ->
    compare#5(#less(@x, @y), @x, @y)
  , compare#4(#false(), @r, @x, @y) -> @r
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , compare#1(nil(), @b2) -> #abs(#0())
  , compare#1(::(@x, @xs), @b2) -> compare#2(@b2, @x, @xs)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We replace rewrite rules by usable rules:

  Weak Usable Rules:
    { #natsub(@x, #0()) -> @x
    , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
    , -(@x, @y) -> #sub(@x, @y)
    , diff#1(#true()) -> #abs(#pos(#s(#0())))
    , diff#1(#false()) -> #abs(#0())
    , #natdiv(#0(), #0()) -> #divByZero()
    , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
    , #add(#neg(#s(#0())), @y) -> #pred(@y)
    , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
    , #add(#pos(#s(#0())), @y) -> #succ(@y)
    , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
    , #add(#0(), @y) -> @y
    , mult#2(@zs, @b2, @x) ->
      mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
    , div(@x, @y) -> #div(@x, @y)
    , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
    , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
    , #and(#true(), #true()) -> #true()
    , #and(#true(), #false()) -> #false()
    , #and(#false(), #true()) -> #false()
    , #and(#false(), #false()) -> #false()
    , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
    , #compare(#neg(@x), #pos(@y)) -> #LT()
    , #compare(#neg(@x), #0()) -> #LT()
    , #compare(#pos(@x), #neg(@y)) -> #GT()
    , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
    , #compare(#pos(@x), #0()) -> #GT()
    , #compare(#0(), #neg(@y)) -> #GT()
    , #compare(#0(), #pos(@y)) -> #LT()
    , #compare(#0(), #0()) -> #EQ()
    , #compare(#0(), #s(@y)) -> #LT()
    , #compare(#s(@x), #0()) -> #GT()
    , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
    , mult(@b1, @b2) -> mult#1(@b1, @b2)
    , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
    , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
    , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
    , +(@x, @y) -> #add(@x, @y)
    , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
    , sum#4(#false()) ->
      tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
    , *(@x, @y) -> #mult(@x, @y)
    , #less(@x, @y) -> #cklt(#compare(@x, @y))
    , #equal(@x, @y) -> #eq(@x, @y)
    , #eq(nil(), nil()) -> #true()
    , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
    , #eq(nil(), ::(@y_1, @y_2)) -> #false()
    , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
    , #eq(#neg(@x), #pos(@y)) -> #false()
    , #eq(#neg(@x), #0()) -> #false()
    , #eq(#pos(@x), #neg(@y)) -> #false()
    , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
    , #eq(#pos(@x), #0()) -> #false()
    , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
    , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), nil()) -> #false()
    , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(#0(), #neg(@y)) -> #false()
    , #eq(#0(), #pos(@y)) -> #false()
    , #eq(#0(), #0()) -> #true()
    , #eq(#0(), #s(@y)) -> #false()
    , #eq(#s(@x), #0()) -> #false()
    , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
    , #natmult(#0(), @y) -> #0()
    , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
    , #cklt(#EQ()) -> #false()
    , #cklt(#LT()) -> #true()
    , #cklt(#GT()) -> #false()
    , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
    , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
    , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
    , #sub(@x, #0()) -> @x
    , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
    , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
    , mult#3(#false(), @b2, @zs) -> @zs
    , add'#1(nil(), @b2, @r) -> nil()
    , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
    , add'#2(nil(), @r, @x, @xs) -> nil()
    , add'#2(::(@y, @ys), @r, @x, @xs) ->
      add'#3(sum(@x, @y, @r), @xs, @ys)
    , diff(@x, @y, @r) ->
      tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
              diff#1(#less(-(-(@x, @y), @r), #0())))
    , mult#1(nil(), @b2) -> nil()
    , mult#1(::(@x, @xs), @b2) ->
      mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
    , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
    , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
    , #mult(#neg(@x), #0()) -> #0()
    , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
    , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
    , #mult(#pos(@x), #0()) -> #0()
    , #mult(#0(), #neg(@y)) -> #0()
    , #mult(#0(), #pos(@y)) -> #0()
    , #mult(#0(), #0()) -> #0()
    , #succ(#neg(#s(#0()))) -> #0()
    , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
    , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
    , #succ(#0()) -> #pos(#s(#0()))
    , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
    , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
    , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
    , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
    , #div(#neg(@x), #0()) -> #divByZero()
    , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
    , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
    , #div(#pos(@x), #0()) -> #divByZero()
    , #div(#0(), #neg(@y)) -> #0()
    , #div(#0(), #pos(@y)) -> #0()
    , #div(#0(), #0()) -> #divByZero()
    , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
    , #abs(#neg(@x)) -> #pos(@x)
    , #abs(#pos(@x)) -> #pos(@x)
    , #abs(#0()) -> #0()
    , #abs(#s(@x)) -> #pos(#s(@x))
    , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
    , #pred(#pos(#s(#0()))) -> #0()
    , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
    , #pred(#0()) -> #neg(#s(#0())) }

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

Strict DPs:
  { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
  , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
  , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
  , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
  , mult3^#(@b1, @b2, @b3) ->
    c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
  , leq^#(@b1, @b2) -> c_9(compare^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_13(sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
  , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
  , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
  , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_18(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_19(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_20(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_22(compare#2^#(@b2, @x, @xs)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

Consider the dependency graph

  1: sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     -->_1 sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r)) :2
  
  2: sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     -->_1 sub'#1^#(::(@x, @xs), @b2, @r) ->
           c_19(sub'#2^#(@b2, @r, @x, @xs)) :19
  
  3: mult#2^#(@zs, @b2, @x) ->
     c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
     -->_1 mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs)) :4
  
  4: mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
     -->_1 add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0()))) :16
  
  5: bitToInt'#1^#(::(@x, @xs), @n) ->
     c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
     -->_1 bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n)) :6
  
  6: bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
     -->_1 bitToInt'#1^#(::(@x, @xs), @n) ->
           c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0())))))) :5
  
  7: mult3^#(@b1, @b2, @b3) ->
     c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
     -->_2 mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2)) :8
     -->_1 mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2)) :8
  
  8: mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
     -->_1 mult#1^#(::(@x, @xs), @b2) ->
           c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
                mult^#(@xs, @b2)) :11
  
  9: leq^#(@b1, @b2) -> c_9(compare^#(@b1, @b2))
     -->_1 compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2)) :10
  
  10: compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
     -->_1 compare#1^#(::(@x, @xs), @b2) ->
           c_22(compare#2^#(@b2, @x, @xs)) :22
  
  11: mult#1^#(::(@x, @xs), @b2) ->
      c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
           mult^#(@xs, @b2))
     -->_2 mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2)) :8
     -->_1 mult#2^#(@zs, @b2, @x) ->
           c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs)) :3
  
  12: bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
     -->_1 bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n)) :6
  
  13: sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
      c_13(sub'^#(@xs, @ys, @r'))
     -->_1 sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r)) :2
  
  14: sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
      c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     -->_1 sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
           c_13(sub'^#(@xs, @ys, @r')) :13
  
  15: compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
     -->_1 compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2)) :10
  
  16: add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
     -->_1 add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r)) :17
  
  17: add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
     -->_1 add'#1^#(::(@x, @xs), @b2, @r) ->
           c_20(add'#2^#(@b2, @r, @x, @xs)) :20
  
  18: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
      c_18(add'^#(@xs, @ys, @r'))
     -->_1 add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r)) :17
  
  19: sub'#1^#(::(@x, @xs), @b2, @r) ->
      c_19(sub'#2^#(@b2, @r, @x, @xs))
     -->_1 sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
           c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys)) :14
  
  20: add'#1^#(::(@x, @xs), @b2, @r) ->
      c_20(add'#2^#(@b2, @r, @x, @xs))
     -->_1 add'#2^#(::(@y, @ys), @r, @x, @xs) ->
           c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) :21
  
  21: add'#2^#(::(@y, @ys), @r, @x, @xs) ->
      c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
     -->_1 add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
           c_18(add'^#(@xs, @ys, @r')) :18
  
  22: compare#1^#(::(@x, @xs), @b2) ->
      c_22(compare#2^#(@b2, @x, @xs))
     -->_1 compare#2^#(::(@y, @ys), @x, @xs) ->
           c_15(compare^#(@xs, @ys)) :15
  

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).

  { leq^#(@b1, @b2) -> c_9(compare^#(@b1, @b2)) }


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

Strict DPs:
  { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
  , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
  , mult#2^#(@zs, @b2, @x) ->
    c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
  , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
  , bitToInt'#1^#(::(@x, @xs), @n) ->
    c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
  , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
  , mult3^#(@b1, @b2, @b3) ->
    c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
  , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
  , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
  , mult#1^#(::(@x, @xs), @b2) ->
    c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
         mult^#(@xs, @b2))
  , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
  , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_13(sub'^#(@xs, @ys, @r'))
  , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
  , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
  , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
  , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
  , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
    c_18(add'^#(@xs, @ys, @r'))
  , sub'#1^#(::(@x, @xs), @b2, @r) ->
    c_19(sub'#2^#(@b2, @r, @x, @xs))
  , add'#1^#(::(@x, @xs), @b2, @r) ->
    c_20(add'#2^#(@b2, @r, @x, @xs))
  , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
    c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
  , compare#1^#(::(@x, @xs), @b2) ->
    c_22(compare#2^#(@b2, @x, @xs)) }
Weak Trs:
  { #natsub(@x, #0()) -> @x
  , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
  , -(@x, @y) -> #sub(@x, @y)
  , diff#1(#true()) -> #abs(#pos(#s(#0())))
  , diff#1(#false()) -> #abs(#0())
  , #natdiv(#0(), #0()) -> #divByZero()
  , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
  , #add(#neg(#s(#0())), @y) -> #pred(@y)
  , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
  , #add(#pos(#s(#0())), @y) -> #succ(@y)
  , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
  , #add(#0(), @y) -> @y
  , mult#2(@zs, @b2, @x) ->
    mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
  , div(@x, @y) -> #div(@x, @y)
  , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
  , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
  , #and(#true(), #true()) -> #true()
  , #and(#true(), #false()) -> #false()
  , #and(#false(), #true()) -> #false()
  , #and(#false(), #false()) -> #false()
  , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
  , #compare(#neg(@x), #pos(@y)) -> #LT()
  , #compare(#neg(@x), #0()) -> #LT()
  , #compare(#pos(@x), #neg(@y)) -> #GT()
  , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
  , #compare(#pos(@x), #0()) -> #GT()
  , #compare(#0(), #neg(@y)) -> #GT()
  , #compare(#0(), #pos(@y)) -> #LT()
  , #compare(#0(), #0()) -> #EQ()
  , #compare(#0(), #s(@y)) -> #LT()
  , #compare(#s(@x), #0()) -> #GT()
  , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
  , mult(@b1, @b2) -> mult#1(@b1, @b2)
  , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
  , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
  , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
  , +(@x, @y) -> #add(@x, @y)
  , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
  , sum#4(#false()) ->
    tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
  , *(@x, @y) -> #mult(@x, @y)
  , #less(@x, @y) -> #cklt(#compare(@x, @y))
  , #equal(@x, @y) -> #eq(@x, @y)
  , #eq(nil(), nil()) -> #true()
  , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(nil(), ::(@y_1, @y_2)) -> #false()
  , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
  , #eq(#neg(@x), #pos(@y)) -> #false()
  , #eq(#neg(@x), #0()) -> #false()
  , #eq(#pos(@x), #neg(@y)) -> #false()
  , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
  , #eq(#pos(@x), #0()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
  , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), nil()) -> #false()
  , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
  , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
    #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
  , #eq(#0(), #neg(@y)) -> #false()
  , #eq(#0(), #pos(@y)) -> #false()
  , #eq(#0(), #0()) -> #true()
  , #eq(#0(), #s(@y)) -> #false()
  , #eq(#s(@x), #0()) -> #false()
  , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
  , #natmult(#0(), @y) -> #0()
  , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
  , #cklt(#EQ()) -> #false()
  , #cklt(#LT()) -> #true()
  , #cklt(#GT()) -> #false()
  , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
  , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
  , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
  , #sub(@x, #0()) -> @x
  , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
  , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
  , mult#3(#false(), @b2, @zs) -> @zs
  , add'#1(nil(), @b2, @r) -> nil()
  , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
  , add'#2(nil(), @r, @x, @xs) -> nil()
  , add'#2(::(@y, @ys), @r, @x, @xs) ->
    add'#3(sum(@x, @y, @r), @xs, @ys)
  , diff(@x, @y, @r) ->
    tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
            diff#1(#less(-(-(@x, @y), @r), #0())))
  , mult#1(nil(), @b2) -> nil()
  , mult#1(::(@x, @xs), @b2) ->
    mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
  , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#neg(@x), #0()) -> #0()
  , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
  , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
  , #mult(#pos(@x), #0()) -> #0()
  , #mult(#0(), #neg(@y)) -> #0()
  , #mult(#0(), #pos(@y)) -> #0()
  , #mult(#0(), #0()) -> #0()
  , #succ(#neg(#s(#0()))) -> #0()
  , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
  , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
  , #succ(#0()) -> #pos(#s(#0()))
  , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
  , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
  , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#neg(@x), #0()) -> #divByZero()
  , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
  , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
  , #div(#pos(@x), #0()) -> #divByZero()
  , #div(#0(), #neg(@y)) -> #0()
  , #div(#0(), #pos(@y)) -> #0()
  , #div(#0(), #0()) -> #divByZero()
  , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
  , #abs(#neg(@x)) -> #pos(@x)
  , #abs(#pos(@x)) -> #pos(@x)
  , #abs(#0()) -> #0()
  , #abs(#s(@x)) -> #pos(#s(@x))
  , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
  , #pred(#pos(#s(#0()))) -> #0()
  , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
  , #pred(#0()) -> #neg(#s(#0())) }
Obligation:
  innermost runtime complexity
Answer:
  YES(O(1),O(n^2))

We analyse the complexity of following sub-problems (R) and (S).
Problem (S) is obtained from the input problem by shifting strict
rules from (R) into the weak component:

Problem (R):
------------
  Strict DPs:
    { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
    , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
    , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
      c_13(sub'^#(@xs, @ys, @r'))
    , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
      c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
    , sub'#1^#(::(@x, @xs), @b2, @r) ->
      c_19(sub'#2^#(@b2, @r, @x, @xs)) }
  Weak DPs:
    { mult#2^#(@zs, @b2, @x) ->
      c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
    , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
    , bitToInt'#1^#(::(@x, @xs), @n) ->
      c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
    , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
    , mult3^#(@b1, @b2, @b3) ->
      c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
    , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
    , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
    , mult#1^#(::(@x, @xs), @b2) ->
      c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
           mult^#(@xs, @b2))
    , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
    , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
    , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
    , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
    , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
      c_18(add'^#(@xs, @ys, @r'))
    , add'#1^#(::(@x, @xs), @b2, @r) ->
      c_20(add'#2^#(@b2, @r, @x, @xs))
    , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
      c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
    , compare#1^#(::(@x, @xs), @b2) ->
      c_22(compare#2^#(@b2, @x, @xs)) }
  Weak Trs:
    { #natsub(@x, #0()) -> @x
    , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
    , -(@x, @y) -> #sub(@x, @y)
    , diff#1(#true()) -> #abs(#pos(#s(#0())))
    , diff#1(#false()) -> #abs(#0())
    , #natdiv(#0(), #0()) -> #divByZero()
    , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
    , #add(#neg(#s(#0())), @y) -> #pred(@y)
    , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
    , #add(#pos(#s(#0())), @y) -> #succ(@y)
    , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
    , #add(#0(), @y) -> @y
    , mult#2(@zs, @b2, @x) ->
      mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
    , div(@x, @y) -> #div(@x, @y)
    , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
    , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
    , #and(#true(), #true()) -> #true()
    , #and(#true(), #false()) -> #false()
    , #and(#false(), #true()) -> #false()
    , #and(#false(), #false()) -> #false()
    , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
    , #compare(#neg(@x), #pos(@y)) -> #LT()
    , #compare(#neg(@x), #0()) -> #LT()
    , #compare(#pos(@x), #neg(@y)) -> #GT()
    , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
    , #compare(#pos(@x), #0()) -> #GT()
    , #compare(#0(), #neg(@y)) -> #GT()
    , #compare(#0(), #pos(@y)) -> #LT()
    , #compare(#0(), #0()) -> #EQ()
    , #compare(#0(), #s(@y)) -> #LT()
    , #compare(#s(@x), #0()) -> #GT()
    , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
    , mult(@b1, @b2) -> mult#1(@b1, @b2)
    , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
    , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
    , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
    , +(@x, @y) -> #add(@x, @y)
    , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
    , sum#4(#false()) ->
      tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
    , *(@x, @y) -> #mult(@x, @y)
    , #less(@x, @y) -> #cklt(#compare(@x, @y))
    , #equal(@x, @y) -> #eq(@x, @y)
    , #eq(nil(), nil()) -> #true()
    , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
    , #eq(nil(), ::(@y_1, @y_2)) -> #false()
    , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
    , #eq(#neg(@x), #pos(@y)) -> #false()
    , #eq(#neg(@x), #0()) -> #false()
    , #eq(#pos(@x), #neg(@y)) -> #false()
    , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
    , #eq(#pos(@x), #0()) -> #false()
    , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
    , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), nil()) -> #false()
    , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(#0(), #neg(@y)) -> #false()
    , #eq(#0(), #pos(@y)) -> #false()
    , #eq(#0(), #0()) -> #true()
    , #eq(#0(), #s(@y)) -> #false()
    , #eq(#s(@x), #0()) -> #false()
    , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
    , #natmult(#0(), @y) -> #0()
    , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
    , #cklt(#EQ()) -> #false()
    , #cklt(#LT()) -> #true()
    , #cklt(#GT()) -> #false()
    , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
    , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
    , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
    , #sub(@x, #0()) -> @x
    , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
    , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
    , mult#3(#false(), @b2, @zs) -> @zs
    , add'#1(nil(), @b2, @r) -> nil()
    , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
    , add'#2(nil(), @r, @x, @xs) -> nil()
    , add'#2(::(@y, @ys), @r, @x, @xs) ->
      add'#3(sum(@x, @y, @r), @xs, @ys)
    , diff(@x, @y, @r) ->
      tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
              diff#1(#less(-(-(@x, @y), @r), #0())))
    , mult#1(nil(), @b2) -> nil()
    , mult#1(::(@x, @xs), @b2) ->
      mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
    , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
    , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
    , #mult(#neg(@x), #0()) -> #0()
    , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
    , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
    , #mult(#pos(@x), #0()) -> #0()
    , #mult(#0(), #neg(@y)) -> #0()
    , #mult(#0(), #pos(@y)) -> #0()
    , #mult(#0(), #0()) -> #0()
    , #succ(#neg(#s(#0()))) -> #0()
    , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
    , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
    , #succ(#0()) -> #pos(#s(#0()))
    , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
    , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
    , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
    , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
    , #div(#neg(@x), #0()) -> #divByZero()
    , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
    , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
    , #div(#pos(@x), #0()) -> #divByZero()
    , #div(#0(), #neg(@y)) -> #0()
    , #div(#0(), #pos(@y)) -> #0()
    , #div(#0(), #0()) -> #divByZero()
    , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
    , #abs(#neg(@x)) -> #pos(@x)
    , #abs(#pos(@x)) -> #pos(@x)
    , #abs(#0()) -> #0()
    , #abs(#s(@x)) -> #pos(#s(@x))
    , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
    , #pred(#pos(#s(#0()))) -> #0()
    , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
    , #pred(#0()) -> #neg(#s(#0())) }
  StartTerms: basic terms
  Strategy: innermost

Problem (S):
------------
  Strict DPs:
    { mult#2^#(@zs, @b2, @x) ->
      c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
    , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
    , bitToInt'#1^#(::(@x, @xs), @n) ->
      c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
    , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
    , mult3^#(@b1, @b2, @b3) ->
      c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
    , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
    , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
    , mult#1^#(::(@x, @xs), @b2) ->
      c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
           mult^#(@xs, @b2))
    , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
    , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
    , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
    , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
    , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
      c_18(add'^#(@xs, @ys, @r'))
    , add'#1^#(::(@x, @xs), @b2, @r) ->
      c_20(add'#2^#(@b2, @r, @x, @xs))
    , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
      c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
    , compare#1^#(::(@x, @xs), @b2) ->
      c_22(compare#2^#(@b2, @x, @xs)) }
  Weak DPs:
    { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
    , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
    , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
      c_13(sub'^#(@xs, @ys, @r'))
    , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
      c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
    , sub'#1^#(::(@x, @xs), @b2, @r) ->
      c_19(sub'#2^#(@b2, @r, @x, @xs)) }
  Weak Trs:
    { #natsub(@x, #0()) -> @x
    , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
    , -(@x, @y) -> #sub(@x, @y)
    , diff#1(#true()) -> #abs(#pos(#s(#0())))
    , diff#1(#false()) -> #abs(#0())
    , #natdiv(#0(), #0()) -> #divByZero()
    , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
    , #add(#neg(#s(#0())), @y) -> #pred(@y)
    , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
    , #add(#pos(#s(#0())), @y) -> #succ(@y)
    , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
    , #add(#0(), @y) -> @y
    , mult#2(@zs, @b2, @x) ->
      mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
    , div(@x, @y) -> #div(@x, @y)
    , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
    , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
    , #and(#true(), #true()) -> #true()
    , #and(#true(), #false()) -> #false()
    , #and(#false(), #true()) -> #false()
    , #and(#false(), #false()) -> #false()
    , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
    , #compare(#neg(@x), #pos(@y)) -> #LT()
    , #compare(#neg(@x), #0()) -> #LT()
    , #compare(#pos(@x), #neg(@y)) -> #GT()
    , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
    , #compare(#pos(@x), #0()) -> #GT()
    , #compare(#0(), #neg(@y)) -> #GT()
    , #compare(#0(), #pos(@y)) -> #LT()
    , #compare(#0(), #0()) -> #EQ()
    , #compare(#0(), #s(@y)) -> #LT()
    , #compare(#s(@x), #0()) -> #GT()
    , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
    , mult(@b1, @b2) -> mult#1(@b1, @b2)
    , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
    , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
    , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
    , +(@x, @y) -> #add(@x, @y)
    , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
    , sum#4(#false()) ->
      tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
    , *(@x, @y) -> #mult(@x, @y)
    , #less(@x, @y) -> #cklt(#compare(@x, @y))
    , #equal(@x, @y) -> #eq(@x, @y)
    , #eq(nil(), nil()) -> #true()
    , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
    , #eq(nil(), ::(@y_1, @y_2)) -> #false()
    , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
    , #eq(#neg(@x), #pos(@y)) -> #false()
    , #eq(#neg(@x), #0()) -> #false()
    , #eq(#pos(@x), #neg(@y)) -> #false()
    , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
    , #eq(#pos(@x), #0()) -> #false()
    , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
    , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), nil()) -> #false()
    , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
    , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
      #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
    , #eq(#0(), #neg(@y)) -> #false()
    , #eq(#0(), #pos(@y)) -> #false()
    , #eq(#0(), #0()) -> #true()
    , #eq(#0(), #s(@y)) -> #false()
    , #eq(#s(@x), #0()) -> #false()
    , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
    , #natmult(#0(), @y) -> #0()
    , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
    , #cklt(#EQ()) -> #false()
    , #cklt(#LT()) -> #true()
    , #cklt(#GT()) -> #false()
    , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
    , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
    , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
    , #sub(@x, #0()) -> @x
    , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
    , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
    , mult#3(#false(), @b2, @zs) -> @zs
    , add'#1(nil(), @b2, @r) -> nil()
    , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
    , add'#2(nil(), @r, @x, @xs) -> nil()
    , add'#2(::(@y, @ys), @r, @x, @xs) ->
      add'#3(sum(@x, @y, @r), @xs, @ys)
    , diff(@x, @y, @r) ->
      tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
              diff#1(#less(-(-(@x, @y), @r), #0())))
    , mult#1(nil(), @b2) -> nil()
    , mult#1(::(@x, @xs), @b2) ->
      mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
    , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
    , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
    , #mult(#neg(@x), #0()) -> #0()
    , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
    , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
    , #mult(#pos(@x), #0()) -> #0()
    , #mult(#0(), #neg(@y)) -> #0()
    , #mult(#0(), #pos(@y)) -> #0()
    , #mult(#0(), #0()) -> #0()
    , #succ(#neg(#s(#0()))) -> #0()
    , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
    , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
    , #succ(#0()) -> #pos(#s(#0()))
    , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
    , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
    , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
    , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
    , #div(#neg(@x), #0()) -> #divByZero()
    , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
    , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
    , #div(#pos(@x), #0()) -> #divByZero()
    , #div(#0(), #neg(@y)) -> #0()
    , #div(#0(), #pos(@y)) -> #0()
    , #div(#0(), #0()) -> #divByZero()
    , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
    , #abs(#neg(@x)) -> #pos(@x)
    , #abs(#pos(@x)) -> #pos(@x)
    , #abs(#0()) -> #0()
    , #abs(#s(@x)) -> #pos(#s(@x))
    , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
    , #pred(#pos(#s(#0()))) -> #0()
    , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
    , #pred(#0()) -> #neg(#s(#0())) }
  StartTerms: basic terms
  Strategy: innermost

Overall, the transformation results in the following sub-problem(s):

Generated new problems:
-----------------------
R) Strict DPs:
     { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_13(sub'^#(@xs, @ys, @r'))
     , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     , sub'#1^#(::(@x, @xs), @b2, @r) ->
       c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   Weak DPs:
     { mult#2^#(@zs, @b2, @x) ->
       c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
     , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
     , bitToInt'#1^#(::(@x, @xs), @n) ->
       c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
     , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
     , mult3^#(@b1, @b2, @b3) ->
       c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
     , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
     , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
     , mult#1^#(::(@x, @xs), @b2) ->
       c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
            mult^#(@xs, @b2))
     , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
     , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
     , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
     , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
     , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_18(add'^#(@xs, @ys, @r'))
     , add'#1^#(::(@x, @xs), @b2, @r) ->
       c_20(add'#2^#(@b2, @r, @x, @xs))
     , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
     , compare#1^#(::(@x, @xs), @b2) ->
       c_22(compare#2^#(@b2, @x, @xs)) }
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , mult#2(@zs, @b2, @x) ->
       mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
     , div(@x, @y) -> #div(@x, @y)
     , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #and(#true(), #true()) -> #true()
     , #and(#true(), #false()) -> #false()
     , #and(#false(), #true()) -> #false()
     , #and(#false(), #false()) -> #false()
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , mult(@b1, @b2) -> mult#1(@b1, @b2)
     , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
     , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
     , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
     , +(@x, @y) -> #add(@x, @y)
     , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
     , sum#4(#false()) ->
       tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #equal(@x, @y) -> #eq(@x, @y)
     , #eq(nil(), nil()) -> #true()
     , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(nil(), ::(@y_1, @y_2)) -> #false()
     , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
     , #eq(#neg(@x), #pos(@y)) -> #false()
     , #eq(#neg(@x), #0()) -> #false()
     , #eq(#pos(@x), #neg(@y)) -> #false()
     , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
     , #eq(#pos(@x), #0()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), nil()) -> #false()
     , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(#0(), #neg(@y)) -> #false()
     , #eq(#0(), #pos(@y)) -> #false()
     , #eq(#0(), #0()) -> #true()
     , #eq(#0(), #s(@y)) -> #false()
     , #eq(#s(@x), #0()) -> #false()
     , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
     , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
     , mult#3(#false(), @b2, @zs) -> @zs
     , add'#1(nil(), @b2, @r) -> nil()
     , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
     , add'#2(nil(), @r, @x, @xs) -> nil()
     , add'#2(::(@y, @ys), @r, @x, @xs) ->
       add'#3(sum(@x, @y, @r), @xs, @ys)
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , mult#1(nil(), @b2) -> nil()
     , mult#1(::(@x, @xs), @b2) ->
       mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
     , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   StartTerms: basic terms
   Strategy: innermost
   
   This problem was proven YES(O(1),O(n^1)).

S) Strict DPs:
     { mult#2^#(@zs, @b2, @x) ->
       c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
     , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
     , bitToInt'#1^#(::(@x, @xs), @n) ->
       c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
     , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
     , mult3^#(@b1, @b2, @b3) ->
       c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
     , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
     , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
     , mult#1^#(::(@x, @xs), @b2) ->
       c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
            mult^#(@xs, @b2))
     , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
     , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
     , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
     , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
     , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_18(add'^#(@xs, @ys, @r'))
     , add'#1^#(::(@x, @xs), @b2, @r) ->
       c_20(add'#2^#(@b2, @r, @x, @xs))
     , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
     , compare#1^#(::(@x, @xs), @b2) ->
       c_22(compare#2^#(@b2, @x, @xs)) }
   Weak DPs:
     { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_13(sub'^#(@xs, @ys, @r'))
     , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     , sub'#1^#(::(@x, @xs), @b2, @r) ->
       c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , mult#2(@zs, @b2, @x) ->
       mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
     , div(@x, @y) -> #div(@x, @y)
     , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #and(#true(), #true()) -> #true()
     , #and(#true(), #false()) -> #false()
     , #and(#false(), #true()) -> #false()
     , #and(#false(), #false()) -> #false()
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , mult(@b1, @b2) -> mult#1(@b1, @b2)
     , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
     , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
     , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
     , +(@x, @y) -> #add(@x, @y)
     , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
     , sum#4(#false()) ->
       tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #equal(@x, @y) -> #eq(@x, @y)
     , #eq(nil(), nil()) -> #true()
     , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(nil(), ::(@y_1, @y_2)) -> #false()
     , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
     , #eq(#neg(@x), #pos(@y)) -> #false()
     , #eq(#neg(@x), #0()) -> #false()
     , #eq(#pos(@x), #neg(@y)) -> #false()
     , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
     , #eq(#pos(@x), #0()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), nil()) -> #false()
     , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(#0(), #neg(@y)) -> #false()
     , #eq(#0(), #pos(@y)) -> #false()
     , #eq(#0(), #0()) -> #true()
     , #eq(#0(), #s(@y)) -> #false()
     , #eq(#s(@x), #0()) -> #false()
     , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
     , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
     , mult#3(#false(), @b2, @zs) -> @zs
     , add'#1(nil(), @b2, @r) -> nil()
     , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
     , add'#2(nil(), @r, @x, @xs) -> nil()
     , add'#2(::(@y, @ys), @r, @x, @xs) ->
       add'#3(sum(@x, @y, @r), @xs, @ys)
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , mult#1(nil(), @b2) -> nil()
     , mult#1(::(@x, @xs), @b2) ->
       mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
     , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   StartTerms: basic terms
   Strategy: innermost
   
   This problem was proven YES(O(1),O(n^2)).


Proofs for generated problems:
------------------------------
R) We are left with following problem, upon which TcT provides the
   certificate YES(O(1),O(n^1)).
   
   Strict DPs:
     { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_13(sub'^#(@xs, @ys, @r'))
     , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     , sub'#1^#(::(@x, @xs), @b2, @r) ->
       c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   Weak DPs:
     { mult#2^#(@zs, @b2, @x) ->
       c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
     , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
     , bitToInt'#1^#(::(@x, @xs), @n) ->
       c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
     , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
     , mult3^#(@b1, @b2, @b3) ->
       c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
     , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
     , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
     , mult#1^#(::(@x, @xs), @b2) ->
       c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
            mult^#(@xs, @b2))
     , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
     , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
     , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
     , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
     , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_18(add'^#(@xs, @ys, @r'))
     , add'#1^#(::(@x, @xs), @b2, @r) ->
       c_20(add'#2^#(@b2, @r, @x, @xs))
     , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
     , compare#1^#(::(@x, @xs), @b2) ->
       c_22(compare#2^#(@b2, @x, @xs)) }
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , mult#2(@zs, @b2, @x) ->
       mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
     , div(@x, @y) -> #div(@x, @y)
     , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #and(#true(), #true()) -> #true()
     , #and(#true(), #false()) -> #false()
     , #and(#false(), #true()) -> #false()
     , #and(#false(), #false()) -> #false()
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , mult(@b1, @b2) -> mult#1(@b1, @b2)
     , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
     , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
     , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
     , +(@x, @y) -> #add(@x, @y)
     , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
     , sum#4(#false()) ->
       tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #equal(@x, @y) -> #eq(@x, @y)
     , #eq(nil(), nil()) -> #true()
     , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(nil(), ::(@y_1, @y_2)) -> #false()
     , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
     , #eq(#neg(@x), #pos(@y)) -> #false()
     , #eq(#neg(@x), #0()) -> #false()
     , #eq(#pos(@x), #neg(@y)) -> #false()
     , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
     , #eq(#pos(@x), #0()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), nil()) -> #false()
     , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(#0(), #neg(@y)) -> #false()
     , #eq(#0(), #pos(@y)) -> #false()
     , #eq(#0(), #0()) -> #true()
     , #eq(#0(), #s(@y)) -> #false()
     , #eq(#s(@x), #0()) -> #false()
     , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
     , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
     , mult#3(#false(), @b2, @zs) -> @zs
     , add'#1(nil(), @b2, @r) -> nil()
     , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
     , add'#2(nil(), @r, @x, @xs) -> nil()
     , add'#2(::(@y, @ys), @r, @x, @xs) ->
       add'#3(sum(@x, @y, @r), @xs, @ys)
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , mult#1(nil(), @b2) -> nil()
     , mult#1(::(@x, @xs), @b2) ->
       mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
     , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   Obligation:
     innermost runtime complexity
   Answer:
     YES(O(1),O(n^1))
   
   The following weak DPs constitute a sub-graph of the DG that is
   closed under successors. The DPs are removed.
   
   { mult#2^#(@zs, @b2, @x) ->
     c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
   , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
   , bitToInt'#1^#(::(@x, @xs), @n) ->
     c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
   , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
   , mult3^#(@b1, @b2, @b3) ->
     c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
   , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
   , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
   , mult#1^#(::(@x, @xs), @b2) ->
     c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
          mult^#(@xs, @b2))
   , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
   , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
   , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
   , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
   , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
     c_18(add'^#(@xs, @ys, @r'))
   , add'#1^#(::(@x, @xs), @b2, @r) ->
     c_20(add'#2^#(@b2, @r, @x, @xs))
   , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
     c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
   , compare#1^#(::(@x, @xs), @b2) ->
     c_22(compare#2^#(@b2, @x, @xs)) }
   
   We are left with following problem, upon which TcT provides the
   certificate YES(O(1),O(n^1)).
   
   Strict DPs:
     { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_13(sub'^#(@xs, @ys, @r'))
     , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     , sub'#1^#(::(@x, @xs), @b2, @r) ->
       c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , mult#2(@zs, @b2, @x) ->
       mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
     , div(@x, @y) -> #div(@x, @y)
     , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #and(#true(), #true()) -> #true()
     , #and(#true(), #false()) -> #false()
     , #and(#false(), #true()) -> #false()
     , #and(#false(), #false()) -> #false()
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , mult(@b1, @b2) -> mult#1(@b1, @b2)
     , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
     , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
     , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
     , +(@x, @y) -> #add(@x, @y)
     , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
     , sum#4(#false()) ->
       tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #equal(@x, @y) -> #eq(@x, @y)
     , #eq(nil(), nil()) -> #true()
     , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(nil(), ::(@y_1, @y_2)) -> #false()
     , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
     , #eq(#neg(@x), #pos(@y)) -> #false()
     , #eq(#neg(@x), #0()) -> #false()
     , #eq(#pos(@x), #neg(@y)) -> #false()
     , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
     , #eq(#pos(@x), #0()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), nil()) -> #false()
     , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(#0(), #neg(@y)) -> #false()
     , #eq(#0(), #pos(@y)) -> #false()
     , #eq(#0(), #0()) -> #true()
     , #eq(#0(), #s(@y)) -> #false()
     , #eq(#s(@x), #0()) -> #false()
     , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
     , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
     , mult#3(#false(), @b2, @zs) -> @zs
     , add'#1(nil(), @b2, @r) -> nil()
     , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
     , add'#2(nil(), @r, @x, @xs) -> nil()
     , add'#2(::(@y, @ys), @r, @x, @xs) ->
       add'#3(sum(@x, @y, @r), @xs, @ys)
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , mult#1(nil(), @b2) -> nil()
     , mult#1(::(@x, @xs), @b2) ->
       mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
     , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   Obligation:
     innermost runtime complexity
   Answer:
     YES(O(1),O(n^1))
   
   We replace rewrite rules by usable rules:
   
     Weak Usable Rules:
       { #natsub(@x, #0()) -> @x
       , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
       , -(@x, @y) -> #sub(@x, @y)
       , diff#1(#true()) -> #abs(#pos(#s(#0())))
       , diff#1(#false()) -> #abs(#0())
       , #natdiv(#0(), #0()) -> #divByZero()
       , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
       , #add(#neg(#s(#0())), @y) -> #pred(@y)
       , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
       , #add(#pos(#s(#0())), @y) -> #succ(@y)
       , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
       , #add(#0(), @y) -> @y
       , div(@x, @y) -> #div(@x, @y)
       , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
       , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
       , #compare(#neg(@x), #pos(@y)) -> #LT()
       , #compare(#neg(@x), #0()) -> #LT()
       , #compare(#pos(@x), #neg(@y)) -> #GT()
       , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
       , #compare(#pos(@x), #0()) -> #GT()
       , #compare(#0(), #neg(@y)) -> #GT()
       , #compare(#0(), #pos(@y)) -> #LT()
       , #compare(#0(), #0()) -> #EQ()
       , #compare(#0(), #s(@y)) -> #LT()
       , #compare(#s(@x), #0()) -> #GT()
       , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
       , +(@x, @y) -> #add(@x, @y)
       , *(@x, @y) -> #mult(@x, @y)
       , #less(@x, @y) -> #cklt(#compare(@x, @y))
       , #natmult(#0(), @y) -> #0()
       , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
       , #cklt(#EQ()) -> #false()
       , #cklt(#LT()) -> #true()
       , #cklt(#GT()) -> #false()
       , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
       , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
       , #sub(@x, #0()) -> @x
       , diff(@x, @y, @r) ->
         tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                 diff#1(#less(-(-(@x, @y), @r), #0())))
       , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
       , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
       , #mult(#neg(@x), #0()) -> #0()
       , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
       , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
       , #mult(#pos(@x), #0()) -> #0()
       , #mult(#0(), #neg(@y)) -> #0()
       , #mult(#0(), #pos(@y)) -> #0()
       , #mult(#0(), #0()) -> #0()
       , #succ(#neg(#s(#0()))) -> #0()
       , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
       , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
       , #succ(#0()) -> #pos(#s(#0()))
       , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
       , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
       , #div(#neg(@x), #0()) -> #divByZero()
       , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
       , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
       , #div(#pos(@x), #0()) -> #divByZero()
       , #div(#0(), #neg(@y)) -> #0()
       , #div(#0(), #pos(@y)) -> #0()
       , #div(#0(), #0()) -> #divByZero()
       , #abs(#neg(@x)) -> #pos(@x)
       , #abs(#pos(@x)) -> #pos(@x)
       , #abs(#0()) -> #0()
       , #abs(#s(@x)) -> #pos(#s(@x))
       , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
       , #pred(#pos(#s(#0()))) -> #0()
       , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
       , #pred(#0()) -> #neg(#s(#0())) }
   
   We are left with following problem, upon which TcT provides the
   certificate YES(O(1),O(n^1)).
   
   Strict DPs:
     { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_13(sub'^#(@xs, @ys, @r'))
     , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     , sub'#1^#(::(@x, @xs), @b2, @r) ->
       c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , div(@x, @y) -> #div(@x, @y)
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , +(@x, @y) -> #add(@x, @y)
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   Obligation:
     innermost runtime complexity
   Answer:
     YES(O(1),O(n^1))
   
   We use the processor 'matrix interpretation of dimension 1' to
   orient following rules strictly.
   
   DPs:
     { 1: sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , 2: sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , 5: sub'#1^#(::(@x, @xs), @b2, @r) ->
          c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   Trs: { mod(@x, @y) -> -(@x, *(@x, div(@x, @y))) }
   
   Sub-proof:
   ----------
     The following argument positions are usable:
       Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_13) = {1},
       Uargs(c_14) = {1}, Uargs(c_19) = {1}
     
     TcT has computed the following constructor-based matrix
     interpretation satisfying not(EDA).
     
                [#natsub](x1, x2) = [0]                           
                                                                  
                      [-](x1, x2) = [0]                           
                                                                  
                     [diff#1](x1) = [0]                           
                                                                  
                [#natdiv](x1, x2) = [0]                           
                                                                  
                   [#add](x1, x2) = [0]                           
                                                                  
                    [div](x1, x2) = [0]                           
                                                                  
                            [#EQ] = [0]                           
                                                                  
                    [mod](x1, x2) = [7]                           
                                                                  
               [#compare](x1, x2) = [0]                           
                                                                  
                      [+](x1, x2) = [0]                           
                                                                  
                      [*](x1, x2) = [0]                           
                                                                  
                       [#neg](x1) = [0]                           
                                                                  
                  [#less](x1, x2) = [0]                           
                                                                  
               [#natmult](x1, x2) = [0]                           
                                                                  
                     [#divByZero] = [0]                           
                                                                  
                          [#true] = [0]                           
                                                                  
                      [#cklt](x1) = [0]                           
                                                                  
                   [#sub](x1, x2) = [7] x1 + [0]                  
                                                                  
                       [#pos](x1) = [0]                           
                                                                  
                [tuple#2](x1, x2) = [1] x2 + [0]                  
                                                                  
               [diff](x1, x2, x3) = [0]                           
                                                                  
                         [#false] = [0]                           
                                                                  
                     [::](x1, x2) = [1] x1 + [1] x2 + [2]         
                                                                  
                            [#LT] = [0]                           
                                                                  
                  [#mult](x1, x2) = [0]                           
                                                                  
                      [#succ](x1) = [0]                           
                                                                  
                             [#0] = [0]                           
                                                                  
                   [#div](x1, x2) = [0]                           
                                                                  
                       [#abs](x1) = [0]                           
                                                                  
                      [#pred](x1) = [0]                           
                                                                  
                         [#s](x1) = [0]                           
                                                                  
                            [#GT] = [0]                           
                                                                  
                  [sub^#](x1, x2) = [7] x1 + [7] x2 + [7]         
                                                                  
             [sub'^#](x1, x2, x3) = [4] x1 + [4] x2 + [1]         
                                                                  
           [sub'#3^#](x1, x2, x3) = [4] x1 + [4] x2 + [4] x3 + [1]
                                                                  
       [sub'#2^#](x1, x2, x3, x4) = [4] x1 + [4] x4 + [0]         
                                                                  
           [sub'#1^#](x1, x2, x3) = [4] x1 + [4] x2 + [0]         
                                                                  
                        [c_1](x1) = [1] x1 + [4]                  
                                                                  
                        [c_2](x1) = [1] x1 + [0]                  
                                                                  
                       [c_13](x1) = [1] x1 + [0]                  
                                                                  
                       [c_14](x1) = [1] x1 + [7]                  
                                                                  
                       [c_19](x1) = [1] x1 + [0]                  
     
     The order satisfies the following ordering constraints:
     
                          [#natsub(@x, #0())] =  [0]                                                
                                              ?  [1] @x + [0]                                       
                                              =  [@x]                                               
                                                                                                    
                    [#natsub(#s(@x), #s(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#natsub(@x, @y)]                                  
                                                                                                    
                                  [-(@x, @y)] =  [0]                                                
                                              ?  [7] @x + [0]                                       
                                              =  [#sub(@x, @y)]                                     
                                                                                                    
                            [diff#1(#true())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#abs(#pos(#s(#0())))]                             
                                                                                                    
                           [diff#1(#false())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#abs(#0())]                                       
                                                                                                    
                        [#natdiv(#0(), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#divByZero()]                                     
                                                                                                    
                    [#natdiv(#s(@x), #s(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#s(#natdiv(#natsub(@x, @y), #s(@y)))]             
                                                                                                    
                   [#add(#neg(#s(#0())), @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pred(@y)]                                        
                                                                                                    
                 [#add(#neg(#s(#s(@x))), @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pred(#add(#pos(#s(@x)), @y))]                    
                                                                                                    
                   [#add(#pos(#s(#0())), @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#succ(@y)]                                        
                                                                                                    
                 [#add(#pos(#s(#s(@x))), @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#succ(#add(#pos(#s(@x)), @y))]                    
                                                                                                    
                             [#add(#0(), @y)] =  [0]                                                
                                              ?  [1] @y + [0]                                       
                                              =  [@y]                                               
                                                                                                    
                                [div(@x, @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#div(@x, @y)]                                     
                                                                                                    
                                [mod(@x, @y)] =  [7]                                                
                                              >  [0]                                                
                                              =  [-(@x, *(@x, div(@x, @y)))]                        
                                                                                                    
               [#compare(#neg(@x), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#compare(@y, @x)]                                 
                                                                                                    
               [#compare(#neg(@x), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#LT()]                                            
                                                                                                    
                   [#compare(#neg(@x), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#LT()]                                            
                                                                                                    
               [#compare(#pos(@x), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#GT()]                                            
                                                                                                    
               [#compare(#pos(@x), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#compare(@x, @y)]                                 
                                                                                                    
                   [#compare(#pos(@x), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#GT()]                                            
                                                                                                    
                   [#compare(#0(), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#GT()]                                            
                                                                                                    
                   [#compare(#0(), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#LT()]                                            
                                                                                                    
                       [#compare(#0(), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#EQ()]                                            
                                                                                                    
                     [#compare(#0(), #s(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#LT()]                                            
                                                                                                    
                     [#compare(#s(@x), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#GT()]                                            
                                                                                                    
                   [#compare(#s(@x), #s(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#compare(@x, @y)]                                 
                                                                                                    
                                  [+(@x, @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#add(@x, @y)]                                     
                                                                                                    
                                  [*(@x, @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#mult(@x, @y)]                                    
                                                                                                    
                              [#less(@x, @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#cklt(#compare(@x, @y))]                          
                                                                                                    
                         [#natmult(#0(), @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                       [#natmult(#s(@x), @y)] =  [0]                                                
                                              >= [0]                                                
                                              =  [#add(#pos(@y), #natmult(@x, @y))]                 
                                                                                                    
                               [#cklt(#EQ())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#false()]                                         
                                                                                                    
                               [#cklt(#LT())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#true()]                                          
                                                                                                    
                               [#cklt(#GT())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#false()]                                         
                                                                                                    
                         [#sub(@x, #neg(@y))] =  [7] @x + [0]                                       
                                              >= [0]                                                
                                              =  [#add(@x, #pos(@y))]                               
                                                                                                    
                         [#sub(@x, #pos(@y))] =  [7] @x + [0]                                       
                                              >= [0]                                                
                                              =  [#add(@x, #neg(@y))]                               
                                                                                                    
                             [#sub(@x, #0())] =  [7] @x + [0]                                       
                                              >= [1] @x + [0]                                       
                                              =  [@x]                                               
                                                                                                    
                           [diff(@x, @y, @r)] =  [0]                                                
                                              >= [0]                                                
                                              =  [tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                                                          diff#1(#less(-(-(@x, @y), @r), #0())))]   
                                                                                                    
                  [#mult(#neg(@x), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(#natmult(@x, @y))]                           
                                                                                                    
                  [#mult(#neg(@x), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#neg(#natmult(@x, @y))]                           
                                                                                                    
                      [#mult(#neg(@x), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                  [#mult(#pos(@x), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#neg(#natmult(@x, @y))]                           
                                                                                                    
                  [#mult(#pos(@x), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(#natmult(@x, @y))]                           
                                                                                                    
                      [#mult(#pos(@x), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                      [#mult(#0(), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                      [#mult(#0(), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                          [#mult(#0(), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                      [#succ(#neg(#s(#0())))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                    [#succ(#neg(#s(#s(@x))))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#neg(#s(@x))]                                     
                                                                                                    
                        [#succ(#pos(#s(@x)))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(#s(#s(@x)))]                                 
                                                                                                    
                                [#succ(#0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(#s(#0()))]                                   
                                                                                                    
                   [#div(#neg(@x), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(#natdiv(@x, @y))]                            
                                                                                                    
                   [#div(#neg(@x), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#neg(#natdiv(@x, @y))]                            
                                                                                                    
                       [#div(#neg(@x), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#divByZero()]                                     
                                                                                                    
                   [#div(#pos(@x), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#neg(#natdiv(@x, @y))]                            
                                                                                                    
                   [#div(#pos(@x), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(#natdiv(@x, @y))]                            
                                                                                                    
                       [#div(#pos(@x), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#divByZero()]                                     
                                                                                                    
                       [#div(#0(), #neg(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                       [#div(#0(), #pos(@y))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                           [#div(#0(), #0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#divByZero()]                                     
                                                                                                    
                             [#abs(#neg(@x))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(@x)]                                         
                                                                                                    
                             [#abs(#pos(@x))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(@x)]                                         
                                                                                                    
                                 [#abs(#0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                               [#abs(#s(@x))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(#s(@x))]                                     
                                                                                                    
                        [#pred(#neg(#s(@x)))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#neg(#s(#s(@x)))]                                 
                                                                                                    
                      [#pred(#pos(#s(#0())))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#0()]                                             
                                                                                                    
                    [#pred(#pos(#s(#s(@x))))] =  [0]                                                
                                              >= [0]                                                
                                              =  [#pos(#s(@x))]                                     
                                                                                                    
                                [#pred(#0())] =  [0]                                                
                                              >= [0]                                                
                                              =  [#neg(#s(#0()))]                                   
                                                                                                    
                            [sub^#(@b1, @b2)] =  [7] @b1 + [7] @b2 + [7]                            
                                              >  [4] @b1 + [4] @b2 + [5]                            
                                              =  [c_1(sub'^#(@b1, @b2, #abs(#0())))]                
                                                                                                    
                       [sub'^#(@b1, @b2, @r)] =  [4] @b1 + [4] @b2 + [1]                            
                                              >  [4] @b1 + [4] @b2 + [0]                            
                                              =  [c_2(sub'#1^#(@b1, @b2, @r))]                      
                                                                                                    
       [sub'#3^#(tuple#2(@z, @r'), @xs, @ys)] =  [4] @xs + [4] @ys + [4] @r' + [1]                  
                                              >= [4] @xs + [4] @ys + [1]                            
                                              =  [c_13(sub'^#(@xs, @ys, @r'))]                      
                                                                                                    
         [sub'#2^#(::(@y, @ys), @r, @x, @xs)] =  [4] @y + [4] @xs + [4] @ys + [8]                   
                                              >= [4] @xs + [4] @ys + [8]                            
                                              =  [c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))]       
                                                                                                    
             [sub'#1^#(::(@x, @xs), @b2, @r)] =  [4] @x + [4] @b2 + [4] @xs + [8]                   
                                              >  [4] @b2 + [4] @xs + [0]                            
                                              =  [c_19(sub'#2^#(@b2, @r, @x, @xs))]                 
                                                                                                    
   
   We return to the main proof. Consider the set of all dependency
   pairs
   
   :
     { 1: sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , 2: sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , 3: sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_13(sub'^#(@xs, @ys, @r'))
     , 4: sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     , 5: sub'#1^#(::(@x, @xs), @b2, @r) ->
          c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   
   Processor 'matrix interpretation of dimension 1' induces the
   complexity certificate YES(?,O(n^1)) on application of dependency
   pairs {1,2,5}. These cover all (indirect) predecessors of
   dependency pairs {1,2,3,4,5}, their number of application is
   equally bounded. The dependency pairs are shifted into the weak
   component.
   
   We are left with following problem, upon which TcT provides the
   certificate YES(O(1),O(1)).
   
   Weak DPs:
     { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_13(sub'^#(@xs, @ys, @r'))
     , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     , sub'#1^#(::(@x, @xs), @b2, @r) ->
       c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , div(@x, @y) -> #div(@x, @y)
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , +(@x, @y) -> #add(@x, @y)
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   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.
   
   { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
   , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
   , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
     c_13(sub'^#(@xs, @ys, @r'))
   , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
     c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
   , sub'#1^#(::(@x, @xs), @b2, @r) ->
     c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   
   We are left with following problem, upon which TcT provides the
   certificate YES(O(1),O(1)).
   
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , div(@x, @y) -> #div(@x, @y)
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , +(@x, @y) -> #add(@x, @y)
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   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

S) We are left with following problem, upon which TcT provides the
   certificate YES(O(1),O(n^2)).
   
   Strict DPs:
     { mult#2^#(@zs, @b2, @x) ->
       c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
     , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
     , bitToInt'#1^#(::(@x, @xs), @n) ->
       c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
     , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
     , mult3^#(@b1, @b2, @b3) ->
       c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
     , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
     , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
     , mult#1^#(::(@x, @xs), @b2) ->
       c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
            mult^#(@xs, @b2))
     , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
     , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
     , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
     , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
     , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_18(add'^#(@xs, @ys, @r'))
     , add'#1^#(::(@x, @xs), @b2, @r) ->
       c_20(add'#2^#(@b2, @r, @x, @xs))
     , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
     , compare#1^#(::(@x, @xs), @b2) ->
       c_22(compare#2^#(@b2, @x, @xs)) }
   Weak DPs:
     { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
     , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
     , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_13(sub'^#(@xs, @ys, @r'))
     , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
     , sub'#1^#(::(@x, @xs), @b2, @r) ->
       c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , mult#2(@zs, @b2, @x) ->
       mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
     , div(@x, @y) -> #div(@x, @y)
     , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #and(#true(), #true()) -> #true()
     , #and(#true(), #false()) -> #false()
     , #and(#false(), #true()) -> #false()
     , #and(#false(), #false()) -> #false()
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , mult(@b1, @b2) -> mult#1(@b1, @b2)
     , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
     , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
     , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
     , +(@x, @y) -> #add(@x, @y)
     , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
     , sum#4(#false()) ->
       tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #equal(@x, @y) -> #eq(@x, @y)
     , #eq(nil(), nil()) -> #true()
     , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(nil(), ::(@y_1, @y_2)) -> #false()
     , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
     , #eq(#neg(@x), #pos(@y)) -> #false()
     , #eq(#neg(@x), #0()) -> #false()
     , #eq(#pos(@x), #neg(@y)) -> #false()
     , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
     , #eq(#pos(@x), #0()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), nil()) -> #false()
     , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(#0(), #neg(@y)) -> #false()
     , #eq(#0(), #pos(@y)) -> #false()
     , #eq(#0(), #0()) -> #true()
     , #eq(#0(), #s(@y)) -> #false()
     , #eq(#s(@x), #0()) -> #false()
     , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
     , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
     , mult#3(#false(), @b2, @zs) -> @zs
     , add'#1(nil(), @b2, @r) -> nil()
     , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
     , add'#2(nil(), @r, @x, @xs) -> nil()
     , add'#2(::(@y, @ys), @r, @x, @xs) ->
       add'#3(sum(@x, @y, @r), @xs, @ys)
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , mult#1(nil(), @b2) -> nil()
     , mult#1(::(@x, @xs), @b2) ->
       mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
     , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   Obligation:
     innermost runtime complexity
   Answer:
     YES(O(1),O(n^2))
   
   The following weak DPs constitute a sub-graph of the DG that is
   closed under successors. The DPs are removed.
   
   { sub^#(@b1, @b2) -> c_1(sub'^#(@b1, @b2, #abs(#0())))
   , sub'^#(@b1, @b2, @r) -> c_2(sub'#1^#(@b1, @b2, @r))
   , sub'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
     c_13(sub'^#(@xs, @ys, @r'))
   , sub'#2^#(::(@y, @ys), @r, @x, @xs) ->
     c_14(sub'#3^#(diff(@x, @y, @r), @xs, @ys))
   , sub'#1^#(::(@x, @xs), @b2, @r) ->
     c_19(sub'#2^#(@b2, @r, @x, @xs)) }
   
   We are left with following problem, upon which TcT provides the
   certificate YES(O(1),O(n^2)).
   
   Strict DPs:
     { mult#2^#(@zs, @b2, @x) ->
       c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
     , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
     , bitToInt'#1^#(::(@x, @xs), @n) ->
       c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
     , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
     , mult3^#(@b1, @b2, @b3) ->
       c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
     , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
     , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
     , mult#1^#(::(@x, @xs), @b2) ->
       c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
            mult^#(@xs, @b2))
     , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
     , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
     , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
     , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
     , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
       c_18(add'^#(@xs, @ys, @r'))
     , add'#1^#(::(@x, @xs), @b2, @r) ->
       c_20(add'#2^#(@b2, @r, @x, @xs))
     , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
       c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
     , compare#1^#(::(@x, @xs), @b2) ->
       c_22(compare#2^#(@b2, @x, @xs)) }
   Weak Trs:
     { #natsub(@x, #0()) -> @x
     , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
     , -(@x, @y) -> #sub(@x, @y)
     , diff#1(#true()) -> #abs(#pos(#s(#0())))
     , diff#1(#false()) -> #abs(#0())
     , #natdiv(#0(), #0()) -> #divByZero()
     , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
     , #add(#neg(#s(#0())), @y) -> #pred(@y)
     , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
     , #add(#pos(#s(#0())), @y) -> #succ(@y)
     , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
     , #add(#0(), @y) -> @y
     , mult#2(@zs, @b2, @x) ->
       mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
     , div(@x, @y) -> #div(@x, @y)
     , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
     , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
     , #and(#true(), #true()) -> #true()
     , #and(#true(), #false()) -> #false()
     , #and(#false(), #true()) -> #false()
     , #and(#false(), #false()) -> #false()
     , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
     , #compare(#neg(@x), #pos(@y)) -> #LT()
     , #compare(#neg(@x), #0()) -> #LT()
     , #compare(#pos(@x), #neg(@y)) -> #GT()
     , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
     , #compare(#pos(@x), #0()) -> #GT()
     , #compare(#0(), #neg(@y)) -> #GT()
     , #compare(#0(), #pos(@y)) -> #LT()
     , #compare(#0(), #0()) -> #EQ()
     , #compare(#0(), #s(@y)) -> #LT()
     , #compare(#s(@x), #0()) -> #GT()
     , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
     , mult(@b1, @b2) -> mult#1(@b1, @b2)
     , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
     , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
     , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
     , +(@x, @y) -> #add(@x, @y)
     , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
     , sum#4(#false()) ->
       tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
     , *(@x, @y) -> #mult(@x, @y)
     , #less(@x, @y) -> #cklt(#compare(@x, @y))
     , #equal(@x, @y) -> #eq(@x, @y)
     , #eq(nil(), nil()) -> #true()
     , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(nil(), ::(@y_1, @y_2)) -> #false()
     , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
     , #eq(#neg(@x), #pos(@y)) -> #false()
     , #eq(#neg(@x), #0()) -> #false()
     , #eq(#pos(@x), #neg(@y)) -> #false()
     , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
     , #eq(#pos(@x), #0()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
     , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), nil()) -> #false()
     , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
     , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
       #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
     , #eq(#0(), #neg(@y)) -> #false()
     , #eq(#0(), #pos(@y)) -> #false()
     , #eq(#0(), #0()) -> #true()
     , #eq(#0(), #s(@y)) -> #false()
     , #eq(#s(@x), #0()) -> #false()
     , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
     , #natmult(#0(), @y) -> #0()
     , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
     , #cklt(#EQ()) -> #false()
     , #cklt(#LT()) -> #true()
     , #cklt(#GT()) -> #false()
     , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
     , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
     , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
     , #sub(@x, #0()) -> @x
     , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
     , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
     , mult#3(#false(), @b2, @zs) -> @zs
     , add'#1(nil(), @b2, @r) -> nil()
     , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
     , add'#2(nil(), @r, @x, @xs) -> nil()
     , add'#2(::(@y, @ys), @r, @x, @xs) ->
       add'#3(sum(@x, @y, @r), @xs, @ys)
     , diff(@x, @y, @r) ->
       tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
               diff#1(#less(-(-(@x, @y), @r), #0())))
     , mult#1(nil(), @b2) -> nil()
     , mult#1(::(@x, @xs), @b2) ->
       mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
     , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#neg(@x), #0()) -> #0()
     , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
     , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
     , #mult(#pos(@x), #0()) -> #0()
     , #mult(#0(), #neg(@y)) -> #0()
     , #mult(#0(), #pos(@y)) -> #0()
     , #mult(#0(), #0()) -> #0()
     , #succ(#neg(#s(#0()))) -> #0()
     , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
     , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
     , #succ(#0()) -> #pos(#s(#0()))
     , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
     , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
     , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#neg(@x), #0()) -> #divByZero()
     , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
     , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
     , #div(#pos(@x), #0()) -> #divByZero()
     , #div(#0(), #neg(@y)) -> #0()
     , #div(#0(), #pos(@y)) -> #0()
     , #div(#0(), #0()) -> #divByZero()
     , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
     , #abs(#neg(@x)) -> #pos(@x)
     , #abs(#pos(@x)) -> #pos(@x)
     , #abs(#0()) -> #0()
     , #abs(#s(@x)) -> #pos(#s(@x))
     , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
     , #pred(#pos(#s(#0()))) -> #0()
     , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
     , #pred(#0()) -> #neg(#s(#0())) }
   Obligation:
     innermost runtime complexity
   Answer:
     YES(O(1),O(n^2))
   
   We analyse the complexity of following sub-problems (R) and (S).
   Problem (S) is obtained from the input problem by shifting strict
   rules from (R) into the weak component:
   
   Problem (R):
   ------------
     Strict DPs:
       { mult#2^#(@zs, @b2, @x) ->
         c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
       , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
       , mult3^#(@b1, @b2, @b3) ->
         c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
       , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
       , mult#1^#(::(@x, @xs), @b2) ->
         c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
              mult^#(@xs, @b2))
       , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
       , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
       , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
         c_18(add'^#(@xs, @ys, @r'))
       , add'#1^#(::(@x, @xs), @b2, @r) ->
         c_20(add'#2^#(@b2, @r, @x, @xs))
       , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
         c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
     Weak DPs:
       { bitToInt'#1^#(::(@x, @xs), @n) ->
         c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
       , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
       , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
       , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
       , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
       , compare#1^#(::(@x, @xs), @b2) ->
         c_22(compare#2^#(@b2, @x, @xs)) }
     Weak Trs:
       { #natsub(@x, #0()) -> @x
       , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
       , -(@x, @y) -> #sub(@x, @y)
       , diff#1(#true()) -> #abs(#pos(#s(#0())))
       , diff#1(#false()) -> #abs(#0())
       , #natdiv(#0(), #0()) -> #divByZero()
       , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
       , #add(#neg(#s(#0())), @y) -> #pred(@y)
       , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
       , #add(#pos(#s(#0())), @y) -> #succ(@y)
       , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
       , #add(#0(), @y) -> @y
       , mult#2(@zs, @b2, @x) ->
         mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
       , div(@x, @y) -> #div(@x, @y)
       , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
       , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
       , #and(#true(), #true()) -> #true()
       , #and(#true(), #false()) -> #false()
       , #and(#false(), #true()) -> #false()
       , #and(#false(), #false()) -> #false()
       , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
       , #compare(#neg(@x), #pos(@y)) -> #LT()
       , #compare(#neg(@x), #0()) -> #LT()
       , #compare(#pos(@x), #neg(@y)) -> #GT()
       , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
       , #compare(#pos(@x), #0()) -> #GT()
       , #compare(#0(), #neg(@y)) -> #GT()
       , #compare(#0(), #pos(@y)) -> #LT()
       , #compare(#0(), #0()) -> #EQ()
       , #compare(#0(), #s(@y)) -> #LT()
       , #compare(#s(@x), #0()) -> #GT()
       , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
       , mult(@b1, @b2) -> mult#1(@b1, @b2)
       , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
       , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
       , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
       , +(@x, @y) -> #add(@x, @y)
       , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
       , sum#4(#false()) ->
         tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
       , *(@x, @y) -> #mult(@x, @y)
       , #less(@x, @y) -> #cklt(#compare(@x, @y))
       , #equal(@x, @y) -> #eq(@x, @y)
       , #eq(nil(), nil()) -> #true()
       , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
       , #eq(nil(), ::(@y_1, @y_2)) -> #false()
       , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
       , #eq(#neg(@x), #pos(@y)) -> #false()
       , #eq(#neg(@x), #0()) -> #false()
       , #eq(#pos(@x), #neg(@y)) -> #false()
       , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
       , #eq(#pos(@x), #0()) -> #false()
       , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
       , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
         #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
       , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
       , #eq(::(@x_1, @x_2), nil()) -> #false()
       , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
       , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
         #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
       , #eq(#0(), #neg(@y)) -> #false()
       , #eq(#0(), #pos(@y)) -> #false()
       , #eq(#0(), #0()) -> #true()
       , #eq(#0(), #s(@y)) -> #false()
       , #eq(#s(@x), #0()) -> #false()
       , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
       , #natmult(#0(), @y) -> #0()
       , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
       , #cklt(#EQ()) -> #false()
       , #cklt(#LT()) -> #true()
       , #cklt(#GT()) -> #false()
       , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
       , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
       , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
       , #sub(@x, #0()) -> @x
       , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
       , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
       , mult#3(#false(), @b2, @zs) -> @zs
       , add'#1(nil(), @b2, @r) -> nil()
       , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
       , add'#2(nil(), @r, @x, @xs) -> nil()
       , add'#2(::(@y, @ys), @r, @x, @xs) ->
         add'#3(sum(@x, @y, @r), @xs, @ys)
       , diff(@x, @y, @r) ->
         tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                 diff#1(#less(-(-(@x, @y), @r), #0())))
       , mult#1(nil(), @b2) -> nil()
       , mult#1(::(@x, @xs), @b2) ->
         mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
       , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
       , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
       , #mult(#neg(@x), #0()) -> #0()
       , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
       , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
       , #mult(#pos(@x), #0()) -> #0()
       , #mult(#0(), #neg(@y)) -> #0()
       , #mult(#0(), #pos(@y)) -> #0()
       , #mult(#0(), #0()) -> #0()
       , #succ(#neg(#s(#0()))) -> #0()
       , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
       , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
       , #succ(#0()) -> #pos(#s(#0()))
       , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
       , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
       , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
       , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
       , #div(#neg(@x), #0()) -> #divByZero()
       , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
       , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
       , #div(#pos(@x), #0()) -> #divByZero()
       , #div(#0(), #neg(@y)) -> #0()
       , #div(#0(), #pos(@y)) -> #0()
       , #div(#0(), #0()) -> #divByZero()
       , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
       , #abs(#neg(@x)) -> #pos(@x)
       , #abs(#pos(@x)) -> #pos(@x)
       , #abs(#0()) -> #0()
       , #abs(#s(@x)) -> #pos(#s(@x))
       , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
       , #pred(#pos(#s(#0()))) -> #0()
       , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
       , #pred(#0()) -> #neg(#s(#0())) }
     StartTerms: basic terms
     Strategy: innermost
   
   Problem (S):
   ------------
     Strict DPs:
       { bitToInt'#1^#(::(@x, @xs), @n) ->
         c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
       , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
       , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
       , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
       , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
       , compare#1^#(::(@x, @xs), @b2) ->
         c_22(compare#2^#(@b2, @x, @xs)) }
     Weak DPs:
       { mult#2^#(@zs, @b2, @x) ->
         c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
       , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
       , mult3^#(@b1, @b2, @b3) ->
         c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
       , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
       , mult#1^#(::(@x, @xs), @b2) ->
         c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
              mult^#(@xs, @b2))
       , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
       , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
       , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
         c_18(add'^#(@xs, @ys, @r'))
       , add'#1^#(::(@x, @xs), @b2, @r) ->
         c_20(add'#2^#(@b2, @r, @x, @xs))
       , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
         c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
     Weak Trs:
       { #natsub(@x, #0()) -> @x
       , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
       , -(@x, @y) -> #sub(@x, @y)
       , diff#1(#true()) -> #abs(#pos(#s(#0())))
       , diff#1(#false()) -> #abs(#0())
       , #natdiv(#0(), #0()) -> #divByZero()
       , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
       , #add(#neg(#s(#0())), @y) -> #pred(@y)
       , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
       , #add(#pos(#s(#0())), @y) -> #succ(@y)
       , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
       , #add(#0(), @y) -> @y
       , mult#2(@zs, @b2, @x) ->
         mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
       , div(@x, @y) -> #div(@x, @y)
       , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
       , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
       , #and(#true(), #true()) -> #true()
       , #and(#true(), #false()) -> #false()
       , #and(#false(), #true()) -> #false()
       , #and(#false(), #false()) -> #false()
       , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
       , #compare(#neg(@x), #pos(@y)) -> #LT()
       , #compare(#neg(@x), #0()) -> #LT()
       , #compare(#pos(@x), #neg(@y)) -> #GT()
       , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
       , #compare(#pos(@x), #0()) -> #GT()
       , #compare(#0(), #neg(@y)) -> #GT()
       , #compare(#0(), #pos(@y)) -> #LT()
       , #compare(#0(), #0()) -> #EQ()
       , #compare(#0(), #s(@y)) -> #LT()
       , #compare(#s(@x), #0()) -> #GT()
       , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
       , mult(@b1, @b2) -> mult#1(@b1, @b2)
       , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
       , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
       , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
       , +(@x, @y) -> #add(@x, @y)
       , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
       , sum#4(#false()) ->
         tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
       , *(@x, @y) -> #mult(@x, @y)
       , #less(@x, @y) -> #cklt(#compare(@x, @y))
       , #equal(@x, @y) -> #eq(@x, @y)
       , #eq(nil(), nil()) -> #true()
       , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
       , #eq(nil(), ::(@y_1, @y_2)) -> #false()
       , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
       , #eq(#neg(@x), #pos(@y)) -> #false()
       , #eq(#neg(@x), #0()) -> #false()
       , #eq(#pos(@x), #neg(@y)) -> #false()
       , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
       , #eq(#pos(@x), #0()) -> #false()
       , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
       , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
         #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
       , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
       , #eq(::(@x_1, @x_2), nil()) -> #false()
       , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
       , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
         #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
       , #eq(#0(), #neg(@y)) -> #false()
       , #eq(#0(), #pos(@y)) -> #false()
       , #eq(#0(), #0()) -> #true()
       , #eq(#0(), #s(@y)) -> #false()
       , #eq(#s(@x), #0()) -> #false()
       , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
       , #natmult(#0(), @y) -> #0()
       , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
       , #cklt(#EQ()) -> #false()
       , #cklt(#LT()) -> #true()
       , #cklt(#GT()) -> #false()
       , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
       , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
       , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
       , #sub(@x, #0()) -> @x
       , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
       , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
       , mult#3(#false(), @b2, @zs) -> @zs
       , add'#1(nil(), @b2, @r) -> nil()
       , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
       , add'#2(nil(), @r, @x, @xs) -> nil()
       , add'#2(::(@y, @ys), @r, @x, @xs) ->
         add'#3(sum(@x, @y, @r), @xs, @ys)
       , diff(@x, @y, @r) ->
         tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                 diff#1(#less(-(-(@x, @y), @r), #0())))
       , mult#1(nil(), @b2) -> nil()
       , mult#1(::(@x, @xs), @b2) ->
         mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
       , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
       , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
       , #mult(#neg(@x), #0()) -> #0()
       , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
       , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
       , #mult(#pos(@x), #0()) -> #0()
       , #mult(#0(), #neg(@y)) -> #0()
       , #mult(#0(), #pos(@y)) -> #0()
       , #mult(#0(), #0()) -> #0()
       , #succ(#neg(#s(#0()))) -> #0()
       , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
       , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
       , #succ(#0()) -> #pos(#s(#0()))
       , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
       , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
       , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
       , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
       , #div(#neg(@x), #0()) -> #divByZero()
       , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
       , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
       , #div(#pos(@x), #0()) -> #divByZero()
       , #div(#0(), #neg(@y)) -> #0()
       , #div(#0(), #pos(@y)) -> #0()
       , #div(#0(), #0()) -> #divByZero()
       , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
       , #abs(#neg(@x)) -> #pos(@x)
       , #abs(#pos(@x)) -> #pos(@x)
       , #abs(#0()) -> #0()
       , #abs(#s(@x)) -> #pos(#s(@x))
       , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
       , #pred(#pos(#s(#0()))) -> #0()
       , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
       , #pred(#0()) -> #neg(#s(#0())) }
     StartTerms: basic terms
     Strategy: innermost
   
   Overall, the transformation results in the following sub-problem(s):
   
   Generated new problems:
   -----------------------
   R) Strict DPs:
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , mult3^#(@b1, @b2, @b3) ->
          c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
        , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
        , mult#1^#(::(@x, @xs), @b2) ->
          c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               mult^#(@xs, @b2))
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      Weak DPs:
        { bitToInt'#1^#(::(@x, @xs), @n) ->
          c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
        , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
        , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
        , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
        , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
        , compare#1^#(::(@x, @xs), @b2) ->
          c_22(compare#2^#(@b2, @x, @xs)) }
      Weak Trs:
        { #natsub(@x, #0()) -> @x
        , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
        , -(@x, @y) -> #sub(@x, @y)
        , diff#1(#true()) -> #abs(#pos(#s(#0())))
        , diff#1(#false()) -> #abs(#0())
        , #natdiv(#0(), #0()) -> #divByZero()
        , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
        , #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , div(@x, @y) -> #div(@x, @y)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
        , #compare(#neg(@x), #pos(@y)) -> #LT()
        , #compare(#neg(@x), #0()) -> #LT()
        , #compare(#pos(@x), #neg(@y)) -> #GT()
        , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
        , #compare(#pos(@x), #0()) -> #GT()
        , #compare(#0(), #neg(@y)) -> #GT()
        , #compare(#0(), #pos(@y)) -> #LT()
        , #compare(#0(), #0()) -> #EQ()
        , #compare(#0(), #s(@y)) -> #LT()
        , #compare(#s(@x), #0()) -> #GT()
        , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , *(@x, @y) -> #mult(@x, @y)
        , #less(@x, @y) -> #cklt(#compare(@x, @y))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , #natmult(#0(), @y) -> #0()
        , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
        , #cklt(#EQ()) -> #false()
        , #cklt(#LT()) -> #true()
        , #cklt(#GT()) -> #false()
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
        , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
        , #sub(@x, #0()) -> @x
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , diff(@x, @y, @r) ->
          tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                  diff#1(#less(-(-(@x, @y), @r), #0())))
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#neg(@x), #0()) -> #0()
        , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#pos(@x), #0()) -> #0()
        , #mult(#0(), #neg(@y)) -> #0()
        , #mult(#0(), #pos(@y)) -> #0()
        , #mult(#0(), #0()) -> #0()
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#neg(@x), #0()) -> #divByZero()
        , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#pos(@x), #0()) -> #divByZero()
        , #div(#0(), #neg(@y)) -> #0()
        , #div(#0(), #pos(@y)) -> #0()
        , #div(#0(), #0()) -> #divByZero()
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      StartTerms: basic terms
      Strategy: innermost
      
      This problem was proven YES(O(1),O(n^2)).
   
   S) Strict DPs:
        { bitToInt'#1^#(::(@x, @xs), @n) ->
          c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
        , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
        , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
        , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
        , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
        , compare#1^#(::(@x, @xs), @b2) ->
          c_22(compare#2^#(@b2, @x, @xs)) }
      Weak DPs:
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , mult3^#(@b1, @b2, @b3) ->
          c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
        , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
        , mult#1^#(::(@x, @xs), @b2) ->
          c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               mult^#(@xs, @b2))
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      Weak Trs:
        { #natsub(@x, #0()) -> @x
        , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
        , -(@x, @y) -> #sub(@x, @y)
        , diff#1(#true()) -> #abs(#pos(#s(#0())))
        , diff#1(#false()) -> #abs(#0())
        , #natdiv(#0(), #0()) -> #divByZero()
        , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
        , #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , div(@x, @y) -> #div(@x, @y)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
        , #compare(#neg(@x), #pos(@y)) -> #LT()
        , #compare(#neg(@x), #0()) -> #LT()
        , #compare(#pos(@x), #neg(@y)) -> #GT()
        , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
        , #compare(#pos(@x), #0()) -> #GT()
        , #compare(#0(), #neg(@y)) -> #GT()
        , #compare(#0(), #pos(@y)) -> #LT()
        , #compare(#0(), #0()) -> #EQ()
        , #compare(#0(), #s(@y)) -> #LT()
        , #compare(#s(@x), #0()) -> #GT()
        , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , *(@x, @y) -> #mult(@x, @y)
        , #less(@x, @y) -> #cklt(#compare(@x, @y))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , #natmult(#0(), @y) -> #0()
        , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
        , #cklt(#EQ()) -> #false()
        , #cklt(#LT()) -> #true()
        , #cklt(#GT()) -> #false()
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
        , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
        , #sub(@x, #0()) -> @x
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , diff(@x, @y, @r) ->
          tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                  diff#1(#less(-(-(@x, @y), @r), #0())))
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#neg(@x), #0()) -> #0()
        , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#pos(@x), #0()) -> #0()
        , #mult(#0(), #neg(@y)) -> #0()
        , #mult(#0(), #pos(@y)) -> #0()
        , #mult(#0(), #0()) -> #0()
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#neg(@x), #0()) -> #divByZero()
        , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#pos(@x), #0()) -> #divByZero()
        , #div(#0(), #neg(@y)) -> #0()
        , #div(#0(), #pos(@y)) -> #0()
        , #div(#0(), #0()) -> #divByZero()
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      StartTerms: basic terms
      Strategy: innermost
      
      This problem was proven YES(O(1),O(n^1)).
   
   
   Proofs for generated problems:
   ------------------------------
   R) We are left with following problem, upon which TcT provides the
      certificate YES(O(1),O(n^2)).
      
      Strict DPs:
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , mult3^#(@b1, @b2, @b3) ->
          c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
        , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
        , mult#1^#(::(@x, @xs), @b2) ->
          c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               mult^#(@xs, @b2))
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      Weak DPs:
        { bitToInt'#1^#(::(@x, @xs), @n) ->
          c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
        , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
        , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
        , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
        , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
        , compare#1^#(::(@x, @xs), @b2) ->
          c_22(compare#2^#(@b2, @x, @xs)) }
      Weak Trs:
        { #natsub(@x, #0()) -> @x
        , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
        , -(@x, @y) -> #sub(@x, @y)
        , diff#1(#true()) -> #abs(#pos(#s(#0())))
        , diff#1(#false()) -> #abs(#0())
        , #natdiv(#0(), #0()) -> #divByZero()
        , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
        , #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , div(@x, @y) -> #div(@x, @y)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
        , #compare(#neg(@x), #pos(@y)) -> #LT()
        , #compare(#neg(@x), #0()) -> #LT()
        , #compare(#pos(@x), #neg(@y)) -> #GT()
        , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
        , #compare(#pos(@x), #0()) -> #GT()
        , #compare(#0(), #neg(@y)) -> #GT()
        , #compare(#0(), #pos(@y)) -> #LT()
        , #compare(#0(), #0()) -> #EQ()
        , #compare(#0(), #s(@y)) -> #LT()
        , #compare(#s(@x), #0()) -> #GT()
        , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , *(@x, @y) -> #mult(@x, @y)
        , #less(@x, @y) -> #cklt(#compare(@x, @y))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , #natmult(#0(), @y) -> #0()
        , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
        , #cklt(#EQ()) -> #false()
        , #cklt(#LT()) -> #true()
        , #cklt(#GT()) -> #false()
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
        , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
        , #sub(@x, #0()) -> @x
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , diff(@x, @y, @r) ->
          tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                  diff#1(#less(-(-(@x, @y), @r), #0())))
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#neg(@x), #0()) -> #0()
        , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#pos(@x), #0()) -> #0()
        , #mult(#0(), #neg(@y)) -> #0()
        , #mult(#0(), #pos(@y)) -> #0()
        , #mult(#0(), #0()) -> #0()
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#neg(@x), #0()) -> #divByZero()
        , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#pos(@x), #0()) -> #divByZero()
        , #div(#0(), #neg(@y)) -> #0()
        , #div(#0(), #pos(@y)) -> #0()
        , #div(#0(), #0()) -> #divByZero()
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      Obligation:
        innermost runtime complexity
      Answer:
        YES(O(1),O(n^2))
      
      The following weak DPs constitute a sub-graph of the DG that is
      closed under successors. The DPs are removed.
      
      { bitToInt'#1^#(::(@x, @xs), @n) ->
        c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
      , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
      , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
      , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
      , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
      , compare#1^#(::(@x, @xs), @b2) ->
        c_22(compare#2^#(@b2, @x, @xs)) }
      
      We are left with following problem, upon which TcT provides the
      certificate YES(O(1),O(n^2)).
      
      Strict DPs:
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , mult3^#(@b1, @b2, @b3) ->
          c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
        , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
        , mult#1^#(::(@x, @xs), @b2) ->
          c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               mult^#(@xs, @b2))
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      Weak Trs:
        { #natsub(@x, #0()) -> @x
        , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
        , -(@x, @y) -> #sub(@x, @y)
        , diff#1(#true()) -> #abs(#pos(#s(#0())))
        , diff#1(#false()) -> #abs(#0())
        , #natdiv(#0(), #0()) -> #divByZero()
        , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
        , #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , div(@x, @y) -> #div(@x, @y)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
        , #compare(#neg(@x), #pos(@y)) -> #LT()
        , #compare(#neg(@x), #0()) -> #LT()
        , #compare(#pos(@x), #neg(@y)) -> #GT()
        , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
        , #compare(#pos(@x), #0()) -> #GT()
        , #compare(#0(), #neg(@y)) -> #GT()
        , #compare(#0(), #pos(@y)) -> #LT()
        , #compare(#0(), #0()) -> #EQ()
        , #compare(#0(), #s(@y)) -> #LT()
        , #compare(#s(@x), #0()) -> #GT()
        , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , *(@x, @y) -> #mult(@x, @y)
        , #less(@x, @y) -> #cklt(#compare(@x, @y))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , #natmult(#0(), @y) -> #0()
        , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
        , #cklt(#EQ()) -> #false()
        , #cklt(#LT()) -> #true()
        , #cklt(#GT()) -> #false()
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
        , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
        , #sub(@x, #0()) -> @x
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , diff(@x, @y, @r) ->
          tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                  diff#1(#less(-(-(@x, @y), @r), #0())))
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#neg(@x), #0()) -> #0()
        , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#pos(@x), #0()) -> #0()
        , #mult(#0(), #neg(@y)) -> #0()
        , #mult(#0(), #pos(@y)) -> #0()
        , #mult(#0(), #0()) -> #0()
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#neg(@x), #0()) -> #divByZero()
        , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#pos(@x), #0()) -> #divByZero()
        , #div(#0(), #neg(@y)) -> #0()
        , #div(#0(), #pos(@y)) -> #0()
        , #div(#0(), #0()) -> #divByZero()
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      Obligation:
        innermost runtime complexity
      Answer:
        YES(O(1),O(n^2))
      
      We replace rewrite rules by usable rules:
      
        Weak Usable Rules:
          { #add(#neg(#s(#0())), @y) -> #pred(@y)
          , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
          , #add(#pos(#s(#0())), @y) -> #succ(@y)
          , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
          , #add(#0(), @y) -> @y
          , mult#2(@zs, @b2, @x) ->
            mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
          , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
          , #and(#true(), #true()) -> #true()
          , #and(#true(), #false()) -> #false()
          , #and(#false(), #true()) -> #false()
          , #and(#false(), #false()) -> #false()
          , mult(@b1, @b2) -> mult#1(@b1, @b2)
          , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
          , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
          , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
          , +(@x, @y) -> #add(@x, @y)
          , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
          , sum#4(#false()) ->
            tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
          , #equal(@x, @y) -> #eq(@x, @y)
          , #eq(nil(), nil()) -> #true()
          , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(nil(), ::(@y_1, @y_2)) -> #false()
          , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
          , #eq(#neg(@x), #pos(@y)) -> #false()
          , #eq(#neg(@x), #0()) -> #false()
          , #eq(#pos(@x), #neg(@y)) -> #false()
          , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
          , #eq(#pos(@x), #0()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), nil()) -> #false()
          , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(#0(), #neg(@y)) -> #false()
          , #eq(#0(), #pos(@y)) -> #false()
          , #eq(#0(), #0()) -> #true()
          , #eq(#0(), #s(@y)) -> #false()
          , #eq(#s(@x), #0()) -> #false()
          , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
          , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
          , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
          , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
          , mult#3(#false(), @b2, @zs) -> @zs
          , add'#1(nil(), @b2, @r) -> nil()
          , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
          , add'#2(nil(), @r, @x, @xs) -> nil()
          , add'#2(::(@y, @ys), @r, @x, @xs) ->
            add'#3(sum(@x, @y, @r), @xs, @ys)
          , mult#1(nil(), @b2) -> nil()
          , mult#1(::(@x, @xs), @b2) ->
            mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
          , #succ(#neg(#s(#0()))) -> #0()
          , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
          , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
          , #succ(#0()) -> #pos(#s(#0()))
          , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
          , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
          , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
          , #abs(#neg(@x)) -> #pos(@x)
          , #abs(#pos(@x)) -> #pos(@x)
          , #abs(#0()) -> #0()
          , #abs(#s(@x)) -> #pos(#s(@x))
          , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
          , #pred(#pos(#s(#0()))) -> #0()
          , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
          , #pred(#0()) -> #neg(#s(#0())) }
      
      We are left with following problem, upon which TcT provides the
      certificate YES(O(1),O(n^2)).
      
      Strict DPs:
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , mult3^#(@b1, @b2, @b3) ->
          c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
        , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
        , mult#1^#(::(@x, @xs), @b2) ->
          c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               mult^#(@xs, @b2))
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      Weak Trs:
        { #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      Obligation:
        innermost runtime complexity
      Answer:
        YES(O(1),O(n^2))
      
      We decompose the input problem according to the dependency graph
      into the upper component
      
        { mult3^#(@b1, @b2, @b3) ->
          c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
        , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
        , mult#1^#(::(@x, @xs), @b2) ->
          c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               mult^#(@xs, @b2)) }
      
      and lower component
      
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      
      Further, following extension rules are added to the lower
      component.
      
      { mult3^#(@b1, @b2, @b3) -> mult^#(@b1, @b2)
      , mult3^#(@b1, @b2, @b3) -> mult^#(mult(@b1, @b2), @b2)
      , mult^#(@b1, @b2) -> mult#1^#(@b1, @b2)
      , mult#1^#(::(@x, @xs), @b2) ->
        mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
      , mult#1^#(::(@x, @xs), @b2) -> mult^#(@xs, @b2) }
      
      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:
          { mult3^#(@b1, @b2, @b3) ->
            c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
          , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
          , mult#1^#(::(@x, @xs), @b2) ->
            c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
                 mult^#(@xs, @b2)) }
        Weak Trs:
          { #add(#neg(#s(#0())), @y) -> #pred(@y)
          , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
          , #add(#pos(#s(#0())), @y) -> #succ(@y)
          , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
          , #add(#0(), @y) -> @y
          , mult#2(@zs, @b2, @x) ->
            mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
          , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
          , #and(#true(), #true()) -> #true()
          , #and(#true(), #false()) -> #false()
          , #and(#false(), #true()) -> #false()
          , #and(#false(), #false()) -> #false()
          , mult(@b1, @b2) -> mult#1(@b1, @b2)
          , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
          , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
          , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
          , +(@x, @y) -> #add(@x, @y)
          , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
          , sum#4(#false()) ->
            tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
          , #equal(@x, @y) -> #eq(@x, @y)
          , #eq(nil(), nil()) -> #true()
          , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(nil(), ::(@y_1, @y_2)) -> #false()
          , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
          , #eq(#neg(@x), #pos(@y)) -> #false()
          , #eq(#neg(@x), #0()) -> #false()
          , #eq(#pos(@x), #neg(@y)) -> #false()
          , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
          , #eq(#pos(@x), #0()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), nil()) -> #false()
          , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(#0(), #neg(@y)) -> #false()
          , #eq(#0(), #pos(@y)) -> #false()
          , #eq(#0(), #0()) -> #true()
          , #eq(#0(), #s(@y)) -> #false()
          , #eq(#s(@x), #0()) -> #false()
          , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
          , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
          , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
          , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
          , mult#3(#false(), @b2, @zs) -> @zs
          , add'#1(nil(), @b2, @r) -> nil()
          , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
          , add'#2(nil(), @r, @x, @xs) -> nil()
          , add'#2(::(@y, @ys), @r, @x, @xs) ->
            add'#3(sum(@x, @y, @r), @xs, @ys)
          , mult#1(nil(), @b2) -> nil()
          , mult#1(::(@x, @xs), @b2) ->
            mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
          , #succ(#neg(#s(#0()))) -> #0()
          , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
          , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
          , #succ(#0()) -> #pos(#s(#0()))
          , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
          , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
          , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
          , #abs(#neg(@x)) -> #pos(@x)
          , #abs(#pos(@x)) -> #pos(@x)
          , #abs(#0()) -> #0()
          , #abs(#s(@x)) -> #pos(#s(@x))
          , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
          , #pred(#pos(#s(#0()))) -> #0()
          , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
          , #pred(#0()) -> #neg(#s(#0())) }
        Obligation:
          innermost runtime complexity
        Answer:
          YES(O(1),O(n^1))
        
        We use the processor 'matrix interpretation of dimension 1' to
        orient following rules strictly.
        
        DPs:
          { 1: mult3^#(@b1, @b2, @b3) ->
               c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
          , 2: mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
          , 3: mult#1^#(::(@x, @xs), @b2) ->
               c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
                    mult^#(@xs, @b2)) }
        Trs:
          { #add(#neg(#s(#0())), @y) -> #pred(@y)
          , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
          , #add(#pos(#s(#0())), @y) -> #succ(@y)
          , #add(#0(), @y) -> @y
          , #and(#true(), #true()) -> #true()
          , #and(#true(), #false()) -> #false()
          , #and(#false(), #true()) -> #false()
          , #and(#false(), #false()) -> #false()
          , mult(@b1, @b2) -> mult#1(@b1, @b2)
          , +(@x, @y) -> #add(@x, @y)
          , #eq(nil(), nil()) -> #true()
          , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(nil(), ::(@y_1, @y_2)) -> #false()
          , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
          , #eq(#neg(@x), #0()) -> #false()
          , #eq(#pos(@x), #neg(@y)) -> #false()
          , #eq(#pos(@x), #0()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), nil()) -> #false()
          , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(#0(), #neg(@y)) -> #false()
          , #eq(#0(), #0()) -> #true()
          , #eq(#0(), #s(@y)) -> #false()
          , #eq(#s(@x), #0()) -> #false()
          , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
          , mult#3(#false(), @b2, @zs) -> @zs
          , add'#1(nil(), @b2, @r) -> nil()
          , add'#2(nil(), @r, @x, @xs) -> nil()
          , mult#1(nil(), @b2) -> nil()
          , mult#1(::(@x, @xs), @b2) ->
            mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
          , #succ(#neg(#s(#0()))) -> #0()
          , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
          , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
          , #succ(#0()) -> #pos(#s(#0()))
          , #abs(#neg(@x)) -> #pos(@x)
          , #abs(#0()) -> #0()
          , #abs(#s(@x)) -> #pos(#s(@x))
          , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
          , #pred(#pos(#s(#0()))) -> #0()
          , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) }
        
        Sub-proof:
        ----------
          The following argument positions are usable:
            Uargs(c_7) = {1, 2}, Uargs(c_8) = {1}, Uargs(c_11) = {1, 2}
          
          TcT has computed the following constructor-based matrix
          interpretation satisfying not(EDA).
          
                      [#add](x1, x2) = [2] x1 + [1] x2 + [4]         
                                                                     
                [mult#2](x1, x2, x3) = [1] x1 + [6]                  
                                                                     
                   [sum](x1, x2, x3) = [4]                           
                                                                     
                      [#and](x1, x2) = [4]                           
                                                                     
                               [nil] = [1]                           
                                                                     
                      [mult](x1, x2) = [3] x1 + [7] x2 + [1]         
                                                                     
                     [sum#2](x1, x2) = [4]                           
                                                                     
                         [sum#1](x1) = [4]                           
                                                                     
                         [+](x1, x2) = [3] x1 + [1] x2 + [7]         
                                                                     
                         [sum#4](x1) = [4]                           
                                                                     
                          [#neg](x1) = [1] x1 + [1]                  
                                                                     
                    [#equal](x1, x2) = [1] x1 + [2] x2 + [1]         
                                                                     
                       [#eq](x1, x2) = [1] x1 + [2] x2 + [1]         
                                                                     
                             [#true] = [2]                           
                                                                     
                       [add](x1, x2) = [1] x2 + [6]                  
                                                                     
                          [#pos](x1) = [1] x1 + [0]                  
                                                                     
                [add'#3](x1, x2, x3) = [2] x1 + [1] x3 + [2]         
                                                                     
                [mult#3](x1, x2, x3) = [1] x3 + [6]                  
                                                                     
                [add'#1](x1, x2, x3) = [1] x2 + [6]                  
                                                                     
            [add'#2](x1, x2, x3, x4) = [1] x1 + [6]                  
                                                                     
                   [tuple#2](x1, x2) = [4]                           
                                                                     
                            [#false] = [2]                           
                                                                     
                    [mult#1](x1, x2) = [3] x1 + [7] x2 + [0]         
                                                                     
                        [::](x1, x2) = [1] x2 + [4]                  
                                                                     
                         [#succ](x1) = [1] x1 + [4]                  
                                                                     
                                [#0] = [1]                           
                                                                     
                     [sum#3](x1, x2) = [4]                           
                                                                     
                  [add'](x1, x2, x3) = [1] x2 + [6]                  
                                                                     
                          [#abs](x1) = [2] x1 + [0]                  
                                                                     
                         [#pred](x1) = [1] x1 + [3]                  
                                                                     
                            [#s](x1) = [1] x1 + [2]                  
                                                                     
              [mult#2^#](x1, x2, x3) = [0]                           
                                                                     
               [mult3^#](x1, x2, x3) = [7] x1 + [7] x2 + [2] x3 + [7]
                                                                     
                    [mult^#](x1, x2) = [1] x1 + [2]                  
                                                                     
                  [mult#1^#](x1, x2) = [1] x1 + [1]                  
                                                                     
                       [c_7](x1, x2) = [1] x1 + [1] x2 + [0]         
                                                                     
                           [c_8](x1) = [1] x1 + [0]                  
                                                                     
                      [c_11](x1, x2) = [4] x1 + [1] x2 + [2]         
          
          The order satisfies the following ordering constraints:
          
                                 [#add(#neg(#s(#0())), @y)] =  [1] @y + [12]                                           
                                                            >  [1] @y + [3]                                            
                                                            =  [#pred(@y)]                                             
                                                                                                                       
                               [#add(#neg(#s(#s(@x))), @y)] =  [2] @x + [1] @y + [14]                                  
                                                            >  [2] @x + [1] @y + [11]                                  
                                                            =  [#pred(#add(#pos(#s(@x)), @y))]                         
                                                                                                                       
                                 [#add(#pos(#s(#0())), @y)] =  [1] @y + [10]                                           
                                                            >  [1] @y + [4]                                            
                                                            =  [#succ(@y)]                                             
                                                                                                                       
                               [#add(#pos(#s(#s(@x))), @y)] =  [2] @x + [1] @y + [12]                                  
                                                            >= [2] @x + [1] @y + [12]                                  
                                                            =  [#succ(#add(#pos(#s(@x)), @y))]                         
                                                                                                                       
                                           [#add(#0(), @y)] =  [1] @y + [6]                                            
                                                            >  [1] @y + [0]                                            
                                                            =  [@y]                                                    
                                                                                                                       
                                     [mult#2(@zs, @b2, @x)] =  [1] @zs + [6]                                           
                                                            >= [1] @zs + [6]                                           
                                                            =  [mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)]          
                                                                                                                       
                                          [sum(@x, @y, @r)] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [sum#1(+(+(@x, @y), @r))]                               
                                                                                                                       
                                   [#and(#true(), #true())] =  [4]                                                     
                                                            >  [2]                                                     
                                                            =  [#true()]                                               
                                                                                                                       
                                  [#and(#true(), #false())] =  [4]                                                     
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                  [#and(#false(), #true())] =  [4]                                                     
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                 [#and(#false(), #false())] =  [4]                                                     
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                           [mult(@b1, @b2)] =  [3] @b1 + [7] @b2 + [1]                                 
                                                            >  [3] @b1 + [7] @b2 + [0]                                 
                                                            =  [mult#1(@b1, @b2)]                                      
                                                                                                                       
                                       [sum#2(#true(), @s)] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [tuple#2(#abs(#0()), #abs(#0()))]                       
                                                                                                                       
                                      [sum#2(#false(), @s)] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [sum#3(#equal(@s, #pos(#s(#0()))), @s)]                 
                                                                                                                       
                                                [sum#1(@s)] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [sum#2(#equal(@s, #0()), @s)]                           
                                                                                                                       
                                                [+(@x, @y)] =  [3] @x + [1] @y + [7]                                   
                                                            >  [2] @x + [1] @y + [4]                                   
                                                            =  [#add(@x, @y)]                                          
                                                                                                                       
                                           [sum#4(#true())] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))]             
                                                                                                                       
                                          [sum#4(#false())] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))]   
                                                                                                                       
                                           [#equal(@x, @y)] =  [1] @x + [2] @y + [1]                                   
                                                            >= [1] @x + [2] @y + [1]                                   
                                                            =  [#eq(@x, @y)]                                           
                                                                                                                       
                                        [#eq(nil(), nil())] =  [4]                                                     
                                                            >  [2]                                                     
                                                            =  [#true()]                                               
                                                                                                                       
                          [#eq(nil(), tuple#2(@y_1, @y_2))] =  [10]                                                    
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                               [#eq(nil(), ::(@y_1, @y_2))] =  [2] @y_2 + [10]                                         
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                  [#eq(#neg(@x), #neg(@y))] =  [1] @x + [2] @y + [4]                                   
                                                            >  [1] @x + [2] @y + [1]                                   
                                                            =  [#eq(@x, @y)]                                           
                                                                                                                       
                                  [#eq(#neg(@x), #pos(@y))] =  [1] @x + [2] @y + [2]                                   
                                                            >= [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                      [#eq(#neg(@x), #0())] =  [1] @x + [4]                                            
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                  [#eq(#pos(@x), #neg(@y))] =  [1] @x + [2] @y + [3]                                   
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                  [#eq(#pos(@x), #pos(@y))] =  [1] @x + [2] @y + [1]                                   
                                                            >= [1] @x + [2] @y + [1]                                   
                                                            =  [#eq(@x, @y)]                                           
                                                                                                                       
                                      [#eq(#pos(@x), #0())] =  [1] @x + [3]                                            
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                          [#eq(tuple#2(@x_1, @x_2), nil())] =  [7]                                                     
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
            [#eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2))] =  [13]                                                    
                                                            >  [4]                                                     
                                                            =  [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))]                
                                                                                                                       
                 [#eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2))] =  [2] @y_2 + [13]                                         
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                               [#eq(::(@x_1, @x_2), nil())] =  [1] @x_2 + [7]                                          
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                 [#eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2))] =  [1] @x_2 + [13]                                         
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                      [#eq(::(@x_1, @x_2), ::(@y_1, @y_2))] =  [1] @x_2 + [2] @y_2 + [13]                              
                                                            >  [4]                                                     
                                                            =  [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))]                
                                                                                                                       
                                      [#eq(#0(), #neg(@y))] =  [2] @y + [4]                                            
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                      [#eq(#0(), #pos(@y))] =  [2] @y + [2]                                            
                                                            >= [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                          [#eq(#0(), #0())] =  [4]                                                     
                                                            >  [2]                                                     
                                                            =  [#true()]                                               
                                                                                                                       
                                        [#eq(#0(), #s(@y))] =  [2] @y + [6]                                            
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                        [#eq(#s(@x), #0())] =  [1] @x + [5]                                            
                                                            >  [2]                                                     
                                                            =  [#false()]                                              
                                                                                                                       
                                      [#eq(#s(@x), #s(@y))] =  [1] @x + [2] @y + [7]                                   
                                                            >  [1] @x + [2] @y + [1]                                   
                                                            =  [#eq(@x, @y)]                                           
                                                                                                                       
                                            [add(@b1, @b2)] =  [1] @b2 + [6]                                           
                                                            >= [1] @b2 + [6]                                           
                                                            =  [add'(@b1, @b2, #abs(#0()))]                            
                                                                                                                       
                       [add'#3(tuple#2(@z, @r'), @xs, @ys)] =  [1] @ys + [10]                                          
                                                            >= [1] @ys + [10]                                          
                                                            =  [::(@z, add'(@xs, @ys, @r'))]                           
                                                                                                                       
                                [mult#3(#true(), @b2, @zs)] =  [1] @zs + [6]                                           
                                                            >= [1] @zs + [6]                                           
                                                            =  [add(@b2, @zs)]                                         
                                                                                                                       
                               [mult#3(#false(), @b2, @zs)] =  [1] @zs + [6]                                           
                                                            >  [1] @zs + [0]                                           
                                                            =  [@zs]                                                   
                                                                                                                       
                                   [add'#1(nil(), @b2, @r)] =  [1] @b2 + [6]                                           
                                                            >  [1]                                                     
                                                            =  [nil()]                                                 
                                                                                                                       
                             [add'#1(::(@x, @xs), @b2, @r)] =  [1] @b2 + [6]                                           
                                                            >= [1] @b2 + [6]                                           
                                                            =  [add'#2(@b2, @r, @x, @xs)]                              
                                                                                                                       
                               [add'#2(nil(), @r, @x, @xs)] =  [7]                                                     
                                                            >  [1]                                                     
                                                            =  [nil()]                                                 
                                                                                                                       
                         [add'#2(::(@y, @ys), @r, @x, @xs)] =  [1] @ys + [10]                                          
                                                            >= [1] @ys + [10]                                          
                                                            =  [add'#3(sum(@x, @y, @r), @xs, @ys)]                     
                                                                                                                       
                                       [mult#1(nil(), @b2)] =  [7] @b2 + [3]                                           
                                                            >  [1]                                                     
                                                            =  [nil()]                                                 
                                                                                                                       
                                 [mult#1(::(@x, @xs), @b2)] =  [7] @b2 + [3] @xs + [12]                                
                                                            >  [7] @b2 + [3] @xs + [11]                                
                                                            =  [mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)]       
                                                                                                                       
                                    [#succ(#neg(#s(#0())))] =  [8]                                                     
                                                            >  [1]                                                     
                                                            =  [#0()]                                                  
                                                                                                                       
                                  [#succ(#neg(#s(#s(@x))))] =  [1] @x + [9]                                            
                                                            >  [1] @x + [3]                                            
                                                            =  [#neg(#s(@x))]                                          
                                                                                                                       
                                      [#succ(#pos(#s(@x)))] =  [1] @x + [6]                                            
                                                            >  [1] @x + [4]                                            
                                                            =  [#pos(#s(#s(@x)))]                                      
                                                                                                                       
                                              [#succ(#0())] =  [5]                                                     
                                                            >  [3]                                                     
                                                            =  [#pos(#s(#0()))]                                        
                                                                                                                       
                                       [sum#3(#true(), @s)] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))]             
                                                                                                                       
                                      [sum#3(#false(), @s)] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [sum#4(#equal(@s, #pos(#s(#s(#0())))))]                 
                                                                                                                       
                                       [add'(@b1, @b2, @r)] =  [1] @b2 + [6]                                           
                                                            >= [1] @b2 + [6]                                           
                                                            =  [add'#1(@b1, @b2, @r)]                                  
                                                                                                                       
                                           [#abs(#neg(@x))] =  [2] @x + [2]                                            
                                                            >  [1] @x + [0]                                            
                                                            =  [#pos(@x)]                                              
                                                                                                                       
                                           [#abs(#pos(@x))] =  [2] @x + [0]                                            
                                                            >= [1] @x + [0]                                            
                                                            =  [#pos(@x)]                                              
                                                                                                                       
                                               [#abs(#0())] =  [2]                                                     
                                                            >  [1]                                                     
                                                            =  [#0()]                                                  
                                                                                                                       
                                             [#abs(#s(@x))] =  [2] @x + [4]                                            
                                                            >  [1] @x + [2]                                            
                                                            =  [#pos(#s(@x))]                                          
                                                                                                                       
                                      [#pred(#neg(#s(@x)))] =  [1] @x + [6]                                            
                                                            >  [1] @x + [5]                                            
                                                            =  [#neg(#s(#s(@x)))]                                      
                                                                                                                       
                                    [#pred(#pos(#s(#0())))] =  [6]                                                     
                                                            >  [1]                                                     
                                                            =  [#0()]                                                  
                                                                                                                       
                                  [#pred(#pos(#s(#s(@x))))] =  [1] @x + [7]                                            
                                                            >  [1] @x + [2]                                            
                                                            =  [#pos(#s(@x))]                                          
                                                                                                                       
                                              [#pred(#0())] =  [4]                                                     
                                                            >= [4]                                                     
                                                            =  [#neg(#s(#0()))]                                        
                                                                                                                       
                                   [mult3^#(@b1, @b2, @b3)] =  [7] @b1 + [7] @b2 + [2] @b3 + [7]                       
                                                            >  [4] @b1 + [7] @b2 + [5]                                 
                                                            =  [c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))]    
                                                                                                                       
                                         [mult^#(@b1, @b2)] =  [1] @b1 + [2]                                           
                                                            >  [1] @b1 + [1]                                           
                                                            =  [c_8(mult#1^#(@b1, @b2))]                               
                                                                                                                       
                               [mult#1^#(::(@x, @xs), @b2)] =  [1] @xs + [5]                                           
                                                            >  [1] @xs + [4]                                           
                                                            =  [c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
                                                                     mult^#(@xs, @b2))]                                
                                                                                                                       
        
        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:
          { mult3^#(@b1, @b2, @b3) ->
            c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
          , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
          , mult#1^#(::(@x, @xs), @b2) ->
            c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
                 mult^#(@xs, @b2)) }
        Weak Trs:
          { #add(#neg(#s(#0())), @y) -> #pred(@y)
          , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
          , #add(#pos(#s(#0())), @y) -> #succ(@y)
          , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
          , #add(#0(), @y) -> @y
          , mult#2(@zs, @b2, @x) ->
            mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
          , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
          , #and(#true(), #true()) -> #true()
          , #and(#true(), #false()) -> #false()
          , #and(#false(), #true()) -> #false()
          , #and(#false(), #false()) -> #false()
          , mult(@b1, @b2) -> mult#1(@b1, @b2)
          , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
          , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
          , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
          , +(@x, @y) -> #add(@x, @y)
          , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
          , sum#4(#false()) ->
            tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
          , #equal(@x, @y) -> #eq(@x, @y)
          , #eq(nil(), nil()) -> #true()
          , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(nil(), ::(@y_1, @y_2)) -> #false()
          , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
          , #eq(#neg(@x), #pos(@y)) -> #false()
          , #eq(#neg(@x), #0()) -> #false()
          , #eq(#pos(@x), #neg(@y)) -> #false()
          , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
          , #eq(#pos(@x), #0()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), nil()) -> #false()
          , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(#0(), #neg(@y)) -> #false()
          , #eq(#0(), #pos(@y)) -> #false()
          , #eq(#0(), #0()) -> #true()
          , #eq(#0(), #s(@y)) -> #false()
          , #eq(#s(@x), #0()) -> #false()
          , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
          , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
          , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
          , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
          , mult#3(#false(), @b2, @zs) -> @zs
          , add'#1(nil(), @b2, @r) -> nil()
          , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
          , add'#2(nil(), @r, @x, @xs) -> nil()
          , add'#2(::(@y, @ys), @r, @x, @xs) ->
            add'#3(sum(@x, @y, @r), @xs, @ys)
          , mult#1(nil(), @b2) -> nil()
          , mult#1(::(@x, @xs), @b2) ->
            mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
          , #succ(#neg(#s(#0()))) -> #0()
          , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
          , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
          , #succ(#0()) -> #pos(#s(#0()))
          , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
          , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
          , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
          , #abs(#neg(@x)) -> #pos(@x)
          , #abs(#pos(@x)) -> #pos(@x)
          , #abs(#0()) -> #0()
          , #abs(#s(@x)) -> #pos(#s(@x))
          , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
          , #pred(#pos(#s(#0()))) -> #0()
          , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
          , #pred(#0()) -> #neg(#s(#0())) }
        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.
        
        { mult3^#(@b1, @b2, @b3) ->
          c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
        , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
        , mult#1^#(::(@x, @xs), @b2) ->
          c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               mult^#(@xs, @b2)) }
        
        We are left with following problem, upon which TcT provides the
        certificate YES(O(1),O(1)).
        
        Weak Trs:
          { #add(#neg(#s(#0())), @y) -> #pred(@y)
          , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
          , #add(#pos(#s(#0())), @y) -> #succ(@y)
          , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
          , #add(#0(), @y) -> @y
          , mult#2(@zs, @b2, @x) ->
            mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
          , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
          , #and(#true(), #true()) -> #true()
          , #and(#true(), #false()) -> #false()
          , #and(#false(), #true()) -> #false()
          , #and(#false(), #false()) -> #false()
          , mult(@b1, @b2) -> mult#1(@b1, @b2)
          , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
          , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
          , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
          , +(@x, @y) -> #add(@x, @y)
          , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
          , sum#4(#false()) ->
            tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
          , #equal(@x, @y) -> #eq(@x, @y)
          , #eq(nil(), nil()) -> #true()
          , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(nil(), ::(@y_1, @y_2)) -> #false()
          , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
          , #eq(#neg(@x), #pos(@y)) -> #false()
          , #eq(#neg(@x), #0()) -> #false()
          , #eq(#pos(@x), #neg(@y)) -> #false()
          , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
          , #eq(#pos(@x), #0()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), nil()) -> #false()
          , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(#0(), #neg(@y)) -> #false()
          , #eq(#0(), #pos(@y)) -> #false()
          , #eq(#0(), #0()) -> #true()
          , #eq(#0(), #s(@y)) -> #false()
          , #eq(#s(@x), #0()) -> #false()
          , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
          , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
          , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
          , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
          , mult#3(#false(), @b2, @zs) -> @zs
          , add'#1(nil(), @b2, @r) -> nil()
          , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
          , add'#2(nil(), @r, @x, @xs) -> nil()
          , add'#2(::(@y, @ys), @r, @x, @xs) ->
            add'#3(sum(@x, @y, @r), @xs, @ys)
          , mult#1(nil(), @b2) -> nil()
          , mult#1(::(@x, @xs), @b2) ->
            mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
          , #succ(#neg(#s(#0()))) -> #0()
          , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
          , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
          , #succ(#0()) -> #pos(#s(#0()))
          , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
          , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
          , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
          , #abs(#neg(@x)) -> #pos(@x)
          , #abs(#pos(@x)) -> #pos(@x)
          , #abs(#0()) -> #0()
          , #abs(#s(@x)) -> #pos(#s(@x))
          , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
          , #pred(#pos(#s(#0()))) -> #0()
          , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
          , #pred(#0()) -> #neg(#s(#0())) }
        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^1)).
      
      Strict DPs:
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      Weak DPs:
        { mult3^#(@b1, @b2, @b3) -> mult^#(@b1, @b2)
        , mult3^#(@b1, @b2, @b3) -> mult^#(mult(@b1, @b2), @b2)
        , mult^#(@b1, @b2) -> mult#1^#(@b1, @b2)
        , mult#1^#(::(@x, @xs), @b2) ->
          mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , mult#1^#(::(@x, @xs), @b2) -> mult^#(@xs, @b2) }
      Weak Trs:
        { #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      Obligation:
        innermost runtime complexity
      Answer:
        YES(O(1),O(n^1))
      
      We use the processor 'matrix interpretation of dimension 1' to
      orient following rules strictly.
      
      DPs:
        { 3: add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , 4: add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , 5: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
             c_18(add'^#(@xs, @ys, @r'))
        , 8: mult3^#(@b1, @b2, @b3) -> mult^#(@b1, @b2)
        , 9: mult3^#(@b1, @b2, @b3) -> mult^#(mult(@b1, @b2), @b2)
        , 12: mult#1^#(::(@x, @xs), @b2) -> mult^#(@xs, @b2) }
      Trs:
        { #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#0(), @y) -> @y
        , +(@x, @y) -> #add(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , #abs(#neg(@x)) -> #pos(@x)
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      
      Sub-proof:
      ----------
        The following argument positions are usable:
          Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_16) = {1},
          Uargs(c_17) = {1}, Uargs(c_18) = {1}, Uargs(c_20) = {1},
          Uargs(c_21) = {1}
        
        TcT has computed the following constructor-based matrix
        interpretation satisfying not(EDA).
        
                      [#add](x1, x2) = [2] x1 + [1] x2 + [1]         
                                                                     
                [mult#2](x1, x2, x3) = [1] x1 + [0]                  
                                                                     
                   [sum](x1, x2, x3) = [3]                           
                                                                     
                      [#and](x1, x2) = [0]                           
                                                                     
                               [nil] = [0]                           
                                                                     
                      [mult](x1, x2) = [1] x1 + [1] x2 + [0]         
                                                                     
                     [sum#2](x1, x2) = [2] x1 + [1]                  
                                                                     
                         [sum#1](x1) = [3]                           
                                                                     
                         [+](x1, x2) = [3] x1 + [1] x2 + [4]         
                                                                     
                         [sum#4](x1) = [1]                           
                                                                     
                          [#neg](x1) = [1] x1 + [2]                  
                                                                     
                    [#equal](x1, x2) = [1] x2 + [1]                  
                                                                     
                       [#eq](x1, x2) = [1] x2 + [1]                  
                                                                     
                             [#true] = [0]                           
                                                                     
                       [add](x1, x2) = [1] x2 + [0]                  
                                                                     
                          [#pos](x1) = [1] x1 + [0]                  
                                                                     
                [add'#3](x1, x2, x3) = [1] x3 + [4]                  
                                                                     
                [mult#3](x1, x2, x3) = [1] x3 + [0]                  
                                                                     
                [add'#1](x1, x2, x3) = [1] x2 + [0]                  
                                                                     
            [add'#2](x1, x2, x3, x4) = [1] x1 + [0]                  
                                                                     
                   [tuple#2](x1, x2) = [1]                           
                                                                     
                            [#false] = [0]                           
                                                                     
                    [mult#1](x1, x2) = [1] x1 + [1] x2 + [0]         
                                                                     
                        [::](x1, x2) = [1] x2 + [4]                  
                                                                     
                         [#succ](x1) = [1] x1 + [4]                  
                                                                     
                                [#0] = [0]                           
                                                                     
                     [sum#3](x1, x2) = [1]                           
                                                                     
                  [add'](x1, x2, x3) = [1] x2 + [0]                  
                                                                     
                          [#abs](x1) = [1] x1 + [0]                  
                                                                     
                         [#pred](x1) = [1] x1 + [7]                  
                                                                     
                            [#s](x1) = [1] x1 + [2]                  
                                                                     
              [mult#2^#](x1, x2, x3) = [2] x1 + [1] x2 + [5]         
                                                                     
              [mult#3^#](x1, x2, x3) = [1] x2 + [1] x3 + [5]         
                                                                     
               [mult3^#](x1, x2, x3) = [7] x1 + [7] x2 + [4] x3 + [7]
                                                                     
                    [mult^#](x1, x2) = [2] x1 + [3] x2 + [5]         
                                                                     
                  [mult#1^#](x1, x2) = [2] x1 + [3] x2 + [5]         
                                                                     
                     [add^#](x1, x2) = [1] x1 + [1] x2 + [5]         
                                                                     
                [add'^#](x1, x2, x3) = [1] x1 + [1] x2 + [4]         
                                                                     
              [add'#3^#](x1, x2, x3) = [3] x1 + [1] x2 + [1] x3 + [2]
                                                                     
              [add'#1^#](x1, x2, x3) = [1] x1 + [1] x2 + [3]         
                                                                     
          [add'#2^#](x1, x2, x3, x4) = [1] x1 + [1] x4 + [7]         
                                                                     
                           [c_3](x1) = [1] x1 + [0]                  
                                                                     
                           [c_4](x1) = [1] x1 + [0]                  
                                                                     
                          [c_16](x1) = [1] x1 + [0]                  
                                                                     
                          [c_17](x1) = [1] x1 + [0]                  
                                                                     
                          [c_18](x1) = [1] x1 + [0]                  
                                                                     
                          [c_20](x1) = [1] x1 + [0]                  
                                                                     
                          [c_21](x1) = [1] x1 + [0]                  
        
        The order satisfies the following ordering constraints:
        
                               [#add(#neg(#s(#0())), @y)] =  [1] @y + [9]                                         
                                                          >  [1] @y + [7]                                         
                                                          =  [#pred(@y)]                                          
                                                                                                                  
                             [#add(#neg(#s(#s(@x))), @y)] =  [2] @x + [1] @y + [13]                               
                                                          >  [2] @x + [1] @y + [12]                               
                                                          =  [#pred(#add(#pos(#s(@x)), @y))]                      
                                                                                                                  
                               [#add(#pos(#s(#0())), @y)] =  [1] @y + [5]                                         
                                                          >  [1] @y + [4]                                         
                                                          =  [#succ(@y)]                                          
                                                                                                                  
                             [#add(#pos(#s(#s(@x))), @y)] =  [2] @x + [1] @y + [9]                                
                                                          >= [2] @x + [1] @y + [9]                                
                                                          =  [#succ(#add(#pos(#s(@x)), @y))]                      
                                                                                                                  
                                         [#add(#0(), @y)] =  [1] @y + [1]                                         
                                                          >  [1] @y + [0]                                         
                                                          =  [@y]                                                 
                                                                                                                  
                                   [mult#2(@zs, @b2, @x)] =  [1] @zs + [0]                                        
                                                          >= [1] @zs + [0]                                        
                                                          =  [mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)]       
                                                                                                                  
                                        [sum(@x, @y, @r)] =  [3]                                                  
                                                          >= [3]                                                  
                                                          =  [sum#1(+(+(@x, @y), @r))]                            
                                                                                                                  
                                 [#and(#true(), #true())] =  [0]                                                  
                                                          >= [0]                                                  
                                                          =  [#true()]                                            
                                                                                                                  
                                [#and(#true(), #false())] =  [0]                                                  
                                                          >= [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                [#and(#false(), #true())] =  [0]                                                  
                                                          >= [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                               [#and(#false(), #false())] =  [0]                                                  
                                                          >= [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                         [mult(@b1, @b2)] =  [1] @b1 + [1] @b2 + [0]                              
                                                          >= [1] @b1 + [1] @b2 + [0]                              
                                                          =  [mult#1(@b1, @b2)]                                   
                                                                                                                  
                                     [sum#2(#true(), @s)] =  [1]                                                  
                                                          >= [1]                                                  
                                                          =  [tuple#2(#abs(#0()), #abs(#0()))]                    
                                                                                                                  
                                    [sum#2(#false(), @s)] =  [1]                                                  
                                                          >= [1]                                                  
                                                          =  [sum#3(#equal(@s, #pos(#s(#0()))), @s)]              
                                                                                                                  
                                              [sum#1(@s)] =  [3]                                                  
                                                          >= [3]                                                  
                                                          =  [sum#2(#equal(@s, #0()), @s)]                        
                                                                                                                  
                                              [+(@x, @y)] =  [3] @x + [1] @y + [4]                                
                                                          >  [2] @x + [1] @y + [1]                                
                                                          =  [#add(@x, @y)]                                       
                                                                                                                  
                                         [sum#4(#true())] =  [1]                                                  
                                                          >= [1]                                                  
                                                          =  [tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))]          
                                                                                                                  
                                        [sum#4(#false())] =  [1]                                                  
                                                          >= [1]                                                  
                                                          =  [tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))]
                                                                                                                  
                                         [#equal(@x, @y)] =  [1] @y + [1]                                         
                                                          >= [1] @y + [1]                                         
                                                          =  [#eq(@x, @y)]                                        
                                                                                                                  
                                      [#eq(nil(), nil())] =  [1]                                                  
                                                          >  [0]                                                  
                                                          =  [#true()]                                            
                                                                                                                  
                        [#eq(nil(), tuple#2(@y_1, @y_2))] =  [2]                                                  
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                             [#eq(nil(), ::(@y_1, @y_2))] =  [1] @y_2 + [5]                                       
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                [#eq(#neg(@x), #neg(@y))] =  [1] @y + [3]                                         
                                                          >  [1] @y + [1]                                         
                                                          =  [#eq(@x, @y)]                                        
                                                                                                                  
                                [#eq(#neg(@x), #pos(@y))] =  [1] @y + [1]                                         
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                    [#eq(#neg(@x), #0())] =  [1]                                                  
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                [#eq(#pos(@x), #neg(@y))] =  [1] @y + [3]                                         
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                [#eq(#pos(@x), #pos(@y))] =  [1] @y + [1]                                         
                                                          >= [1] @y + [1]                                         
                                                          =  [#eq(@x, @y)]                                        
                                                                                                                  
                                    [#eq(#pos(@x), #0())] =  [1]                                                  
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                        [#eq(tuple#2(@x_1, @x_2), nil())] =  [1]                                                  
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
          [#eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2))] =  [2]                                                  
                                                          >  [0]                                                  
                                                          =  [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))]             
                                                                                                                  
               [#eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2))] =  [1] @y_2 + [5]                                       
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                             [#eq(::(@x_1, @x_2), nil())] =  [1]                                                  
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
               [#eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2))] =  [2]                                                  
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                    [#eq(::(@x_1, @x_2), ::(@y_1, @y_2))] =  [1] @y_2 + [5]                                       
                                                          >  [0]                                                  
                                                          =  [#and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))]             
                                                                                                                  
                                    [#eq(#0(), #neg(@y))] =  [1] @y + [3]                                         
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                    [#eq(#0(), #pos(@y))] =  [1] @y + [1]                                         
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                        [#eq(#0(), #0())] =  [1]                                                  
                                                          >  [0]                                                  
                                                          =  [#true()]                                            
                                                                                                                  
                                      [#eq(#0(), #s(@y))] =  [1] @y + [3]                                         
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                      [#eq(#s(@x), #0())] =  [1]                                                  
                                                          >  [0]                                                  
                                                          =  [#false()]                                           
                                                                                                                  
                                    [#eq(#s(@x), #s(@y))] =  [1] @y + [3]                                         
                                                          >  [1] @y + [1]                                         
                                                          =  [#eq(@x, @y)]                                        
                                                                                                                  
                                          [add(@b1, @b2)] =  [1] @b2 + [0]                                        
                                                          >= [1] @b2 + [0]                                        
                                                          =  [add'(@b1, @b2, #abs(#0()))]                         
                                                                                                                  
                     [add'#3(tuple#2(@z, @r'), @xs, @ys)] =  [1] @ys + [4]                                        
                                                          >= [1] @ys + [4]                                        
                                                          =  [::(@z, add'(@xs, @ys, @r'))]                        
                                                                                                                  
                              [mult#3(#true(), @b2, @zs)] =  [1] @zs + [0]                                        
                                                          >= [1] @zs + [0]                                        
                                                          =  [add(@b2, @zs)]                                      
                                                                                                                  
                             [mult#3(#false(), @b2, @zs)] =  [1] @zs + [0]                                        
                                                          >= [1] @zs + [0]                                        
                                                          =  [@zs]                                                
                                                                                                                  
                                 [add'#1(nil(), @b2, @r)] =  [1] @b2 + [0]                                        
                                                          >= [0]                                                  
                                                          =  [nil()]                                              
                                                                                                                  
                           [add'#1(::(@x, @xs), @b2, @r)] =  [1] @b2 + [0]                                        
                                                          >= [1] @b2 + [0]                                        
                                                          =  [add'#2(@b2, @r, @x, @xs)]                           
                                                                                                                  
                             [add'#2(nil(), @r, @x, @xs)] =  [0]                                                  
                                                          >= [0]                                                  
                                                          =  [nil()]                                              
                                                                                                                  
                       [add'#2(::(@y, @ys), @r, @x, @xs)] =  [1] @ys + [4]                                        
                                                          >= [1] @ys + [4]                                        
                                                          =  [add'#3(sum(@x, @y, @r), @xs, @ys)]                  
                                                                                                                  
                                     [mult#1(nil(), @b2)] =  [1] @b2 + [0]                                        
                                                          >= [0]                                                  
                                                          =  [nil()]                                              
                                                                                                                  
                               [mult#1(::(@x, @xs), @b2)] =  [1] @b2 + [1] @xs + [4]                              
                                                          >= [1] @b2 + [1] @xs + [4]                              
                                                          =  [mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)]    
                                                                                                                  
                                  [#succ(#neg(#s(#0())))] =  [8]                                                  
                                                          >  [0]                                                  
                                                          =  [#0()]                                               
                                                                                                                  
                                [#succ(#neg(#s(#s(@x))))] =  [1] @x + [10]                                        
                                                          >  [1] @x + [4]                                         
                                                          =  [#neg(#s(@x))]                                       
                                                                                                                  
                                    [#succ(#pos(#s(@x)))] =  [1] @x + [6]                                         
                                                          >  [1] @x + [4]                                         
                                                          =  [#pos(#s(#s(@x)))]                                   
                                                                                                                  
                                            [#succ(#0())] =  [4]                                                  
                                                          >  [2]                                                  
                                                          =  [#pos(#s(#0()))]                                     
                                                                                                                  
                                     [sum#3(#true(), @s)] =  [1]                                                  
                                                          >= [1]                                                  
                                                          =  [tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))]          
                                                                                                                  
                                    [sum#3(#false(), @s)] =  [1]                                                  
                                                          >= [1]                                                  
                                                          =  [sum#4(#equal(@s, #pos(#s(#s(#0())))))]              
                                                                                                                  
                                     [add'(@b1, @b2, @r)] =  [1] @b2 + [0]                                        
                                                          >= [1] @b2 + [0]                                        
                                                          =  [add'#1(@b1, @b2, @r)]                               
                                                                                                                  
                                         [#abs(#neg(@x))] =  [1] @x + [2]                                         
                                                          >  [1] @x + [0]                                         
                                                          =  [#pos(@x)]                                           
                                                                                                                  
                                         [#abs(#pos(@x))] =  [1] @x + [0]                                         
                                                          >= [1] @x + [0]                                         
                                                          =  [#pos(@x)]                                           
                                                                                                                  
                                             [#abs(#0())] =  [0]                                                  
                                                          >= [0]                                                  
                                                          =  [#0()]                                               
                                                                                                                  
                                           [#abs(#s(@x))] =  [1] @x + [2]                                         
                                                          >= [1] @x + [2]                                         
                                                          =  [#pos(#s(@x))]                                       
                                                                                                                  
                                    [#pred(#neg(#s(@x)))] =  [1] @x + [11]                                        
                                                          >  [1] @x + [6]                                         
                                                          =  [#neg(#s(#s(@x)))]                                   
                                                                                                                  
                                  [#pred(#pos(#s(#0())))] =  [9]                                                  
                                                          >  [0]                                                  
                                                          =  [#0()]                                               
                                                                                                                  
                                [#pred(#pos(#s(#s(@x))))] =  [1] @x + [11]                                        
                                                          >  [1] @x + [2]                                         
                                                          =  [#pos(#s(@x))]                                       
                                                                                                                  
                                            [#pred(#0())] =  [7]                                                  
                                                          >  [4]                                                  
                                                          =  [#neg(#s(#0()))]                                     
                                                                                                                  
                                 [mult#2^#(@zs, @b2, @x)] =  [1] @b2 + [2] @zs + [5]                              
                                                          >= [1] @b2 + [1] @zs + [5]                              
                                                          =  [c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))]
                                                                                                                  
                            [mult#3^#(#true(), @b2, @zs)] =  [1] @b2 + [1] @zs + [5]                              
                                                          >= [1] @b2 + [1] @zs + [5]                              
                                                          =  [c_4(add^#(@b2, @zs))]                               
                                                                                                                  
                                 [mult3^#(@b1, @b2, @b3)] =  [7] @b1 + [7] @b2 + [4] @b3 + [7]                    
                                                          >  [2] @b1 + [3] @b2 + [5]                              
                                                          =  [mult^#(@b1, @b2)]                                   
                                                                                                                  
                                 [mult3^#(@b1, @b2, @b3)] =  [7] @b1 + [7] @b2 + [4] @b3 + [7]                    
                                                          >  [2] @b1 + [5] @b2 + [5]                              
                                                          =  [mult^#(mult(@b1, @b2), @b2)]                        
                                                                                                                  
                                       [mult^#(@b1, @b2)] =  [2] @b1 + [3] @b2 + [5]                              
                                                          >= [2] @b1 + [3] @b2 + [5]                              
                                                          =  [mult#1^#(@b1, @b2)]                                 
                                                                                                                  
                             [mult#1^#(::(@x, @xs), @b2)] =  [3] @b2 + [2] @xs + [13]                             
                                                          >= [3] @b2 + [2] @xs + [13]                             
                                                          =  [mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)]  
                                                                                                                  
                             [mult#1^#(::(@x, @xs), @b2)] =  [3] @b2 + [2] @xs + [13]                             
                                                          >  [3] @b2 + [2] @xs + [5]                              
                                                          =  [mult^#(@xs, @b2)]                                   
                                                                                                                  
                                        [add^#(@b1, @b2)] =  [1] @b1 + [1] @b2 + [5]                              
                                                          >  [1] @b1 + [1] @b2 + [4]                              
                                                          =  [c_16(add'^#(@b1, @b2, #abs(#0())))]                 
                                                                                                                  
                                   [add'^#(@b1, @b2, @r)] =  [1] @b1 + [1] @b2 + [4]                              
                                                          >  [1] @b1 + [1] @b2 + [3]                              
                                                          =  [c_17(add'#1^#(@b1, @b2, @r))]                       
                                                                                                                  
                   [add'#3^#(tuple#2(@z, @r'), @xs, @ys)] =  [1] @xs + [1] @ys + [5]                              
                                                          >  [1] @xs + [1] @ys + [4]                              
                                                          =  [c_18(add'^#(@xs, @ys, @r'))]                        
                                                                                                                  
                         [add'#1^#(::(@x, @xs), @b2, @r)] =  [1] @b2 + [1] @xs + [7]                              
                                                          >= [1] @b2 + [1] @xs + [7]                              
                                                          =  [c_20(add'#2^#(@b2, @r, @x, @xs))]                   
                                                                                                                  
                     [add'#2^#(::(@y, @ys), @r, @x, @xs)] =  [1] @xs + [1] @ys + [11]                             
                                                          >= [1] @xs + [1] @ys + [11]                             
                                                          =  [c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))]          
                                                                                                                  
      
      We return to the main proof. Consider the set of all dependency
      pairs
      
      :
        { 1: mult#2^#(@zs, @b2, @x) ->
             c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , 2: mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , 3: add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , 4: add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , 5: add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
             c_18(add'^#(@xs, @ys, @r'))
        , 6: add'#1^#(::(@x, @xs), @b2, @r) ->
             c_20(add'#2^#(@b2, @r, @x, @xs))
        , 7: add'#2^#(::(@y, @ys), @r, @x, @xs) ->
             c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys))
        , 8: mult3^#(@b1, @b2, @b3) -> mult^#(@b1, @b2)
        , 9: mult3^#(@b1, @b2, @b3) -> mult^#(mult(@b1, @b2), @b2)
        , 10: mult^#(@b1, @b2) -> mult#1^#(@b1, @b2)
        , 11: mult#1^#(::(@x, @xs), @b2) ->
              mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , 12: mult#1^#(::(@x, @xs), @b2) -> mult^#(@xs, @b2) }
      
      Processor 'matrix interpretation of dimension 1' induces the
      complexity certificate YES(?,O(n^1)) on application of dependency
      pairs {3,4,5,8,9,12}. These cover all (indirect) predecessors of
      dependency pairs {1,2,3,4,5,6,7,8,9,10,11,12}, their number of
      application is equally bounded. The dependency pairs are shifted
      into the weak component.
      
      We are left with following problem, upon which TcT provides the
      certificate YES(O(1),O(1)).
      
      Weak DPs:
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , mult3^#(@b1, @b2, @b3) -> mult^#(@b1, @b2)
        , mult3^#(@b1, @b2, @b3) -> mult^#(mult(@b1, @b2), @b2)
        , mult^#(@b1, @b2) -> mult#1^#(@b1, @b2)
        , mult#1^#(::(@x, @xs), @b2) ->
          mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , mult#1^#(::(@x, @xs), @b2) -> mult^#(@xs, @b2)
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      Weak Trs:
        { #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      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.
      
      { mult#2^#(@zs, @b2, @x) ->
        c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
      , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
      , mult3^#(@b1, @b2, @b3) -> mult^#(@b1, @b2)
      , mult3^#(@b1, @b2, @b3) -> mult^#(mult(@b1, @b2), @b2)
      , mult^#(@b1, @b2) -> mult#1^#(@b1, @b2)
      , mult#1^#(::(@x, @xs), @b2) ->
        mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
      , mult#1^#(::(@x, @xs), @b2) -> mult^#(@xs, @b2)
      , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
      , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
      , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
        c_18(add'^#(@xs, @ys, @r'))
      , add'#1^#(::(@x, @xs), @b2, @r) ->
        c_20(add'#2^#(@b2, @r, @x, @xs))
      , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
        c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      
      We are left with following problem, upon which TcT provides the
      certificate YES(O(1),O(1)).
      
      Weak Trs:
        { #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      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
   
   S) We are left with following problem, upon which TcT provides the
      certificate YES(O(1),O(n^1)).
      
      Strict DPs:
        { bitToInt'#1^#(::(@x, @xs), @n) ->
          c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
        , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
        , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
        , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
        , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
        , compare#1^#(::(@x, @xs), @b2) ->
          c_22(compare#2^#(@b2, @x, @xs)) }
      Weak DPs:
        { mult#2^#(@zs, @b2, @x) ->
          c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
        , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
        , mult3^#(@b1, @b2, @b3) ->
          c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
        , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
        , mult#1^#(::(@x, @xs), @b2) ->
          c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
               mult^#(@xs, @b2))
        , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
        , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
        , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
          c_18(add'^#(@xs, @ys, @r'))
        , add'#1^#(::(@x, @xs), @b2, @r) ->
          c_20(add'#2^#(@b2, @r, @x, @xs))
        , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
          c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      Weak Trs:
        { #natsub(@x, #0()) -> @x
        , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
        , -(@x, @y) -> #sub(@x, @y)
        , diff#1(#true()) -> #abs(#pos(#s(#0())))
        , diff#1(#false()) -> #abs(#0())
        , #natdiv(#0(), #0()) -> #divByZero()
        , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
        , #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , div(@x, @y) -> #div(@x, @y)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
        , #compare(#neg(@x), #pos(@y)) -> #LT()
        , #compare(#neg(@x), #0()) -> #LT()
        , #compare(#pos(@x), #neg(@y)) -> #GT()
        , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
        , #compare(#pos(@x), #0()) -> #GT()
        , #compare(#0(), #neg(@y)) -> #GT()
        , #compare(#0(), #pos(@y)) -> #LT()
        , #compare(#0(), #0()) -> #EQ()
        , #compare(#0(), #s(@y)) -> #LT()
        , #compare(#s(@x), #0()) -> #GT()
        , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , *(@x, @y) -> #mult(@x, @y)
        , #less(@x, @y) -> #cklt(#compare(@x, @y))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , #natmult(#0(), @y) -> #0()
        , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
        , #cklt(#EQ()) -> #false()
        , #cklt(#LT()) -> #true()
        , #cklt(#GT()) -> #false()
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
        , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
        , #sub(@x, #0()) -> @x
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , diff(@x, @y, @r) ->
          tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                  diff#1(#less(-(-(@x, @y), @r), #0())))
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#neg(@x), #0()) -> #0()
        , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#pos(@x), #0()) -> #0()
        , #mult(#0(), #neg(@y)) -> #0()
        , #mult(#0(), #pos(@y)) -> #0()
        , #mult(#0(), #0()) -> #0()
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#neg(@x), #0()) -> #divByZero()
        , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#pos(@x), #0()) -> #divByZero()
        , #div(#0(), #neg(@y)) -> #0()
        , #div(#0(), #pos(@y)) -> #0()
        , #div(#0(), #0()) -> #divByZero()
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      Obligation:
        innermost runtime complexity
      Answer:
        YES(O(1),O(n^1))
      
      The following weak DPs constitute a sub-graph of the DG that is
      closed under successors. The DPs are removed.
      
      { mult#2^#(@zs, @b2, @x) ->
        c_3(mult#3^#(#equal(@x, #pos(#s(#0()))), @b2, @zs))
      , mult#3^#(#true(), @b2, @zs) -> c_4(add^#(@b2, @zs))
      , mult3^#(@b1, @b2, @b3) ->
        c_7(mult^#(mult(@b1, @b2), @b2), mult^#(@b1, @b2))
      , mult^#(@b1, @b2) -> c_8(mult#1^#(@b1, @b2))
      , mult#1^#(::(@x, @xs), @b2) ->
        c_11(mult#2^#(::(#abs(#0()), mult(@xs, @b2)), @b2, @x),
             mult^#(@xs, @b2))
      , add^#(@b1, @b2) -> c_16(add'^#(@b1, @b2, #abs(#0())))
      , add'^#(@b1, @b2, @r) -> c_17(add'#1^#(@b1, @b2, @r))
      , add'#3^#(tuple#2(@z, @r'), @xs, @ys) ->
        c_18(add'^#(@xs, @ys, @r'))
      , add'#1^#(::(@x, @xs), @b2, @r) ->
        c_20(add'#2^#(@b2, @r, @x, @xs))
      , add'#2^#(::(@y, @ys), @r, @x, @xs) ->
        c_21(add'#3^#(sum(@x, @y, @r), @xs, @ys)) }
      
      We are left with following problem, upon which TcT provides the
      certificate YES(O(1),O(n^1)).
      
      Strict DPs:
        { bitToInt'#1^#(::(@x, @xs), @n) ->
          c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
        , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
        , compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
        , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))
        , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
        , compare#1^#(::(@x, @xs), @b2) ->
          c_22(compare#2^#(@b2, @x, @xs)) }
      Weak Trs:
        { #natsub(@x, #0()) -> @x
        , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
        , -(@x, @y) -> #sub(@x, @y)
        , diff#1(#true()) -> #abs(#pos(#s(#0())))
        , diff#1(#false()) -> #abs(#0())
        , #natdiv(#0(), #0()) -> #divByZero()
        , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
        , #add(#neg(#s(#0())), @y) -> #pred(@y)
        , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
        , #add(#pos(#s(#0())), @y) -> #succ(@y)
        , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
        , #add(#0(), @y) -> @y
        , mult#2(@zs, @b2, @x) ->
          mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
        , div(@x, @y) -> #div(@x, @y)
        , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
        , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
        , #and(#true(), #true()) -> #true()
        , #and(#true(), #false()) -> #false()
        , #and(#false(), #true()) -> #false()
        , #and(#false(), #false()) -> #false()
        , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
        , #compare(#neg(@x), #pos(@y)) -> #LT()
        , #compare(#neg(@x), #0()) -> #LT()
        , #compare(#pos(@x), #neg(@y)) -> #GT()
        , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
        , #compare(#pos(@x), #0()) -> #GT()
        , #compare(#0(), #neg(@y)) -> #GT()
        , #compare(#0(), #pos(@y)) -> #LT()
        , #compare(#0(), #0()) -> #EQ()
        , #compare(#0(), #s(@y)) -> #LT()
        , #compare(#s(@x), #0()) -> #GT()
        , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
        , mult(@b1, @b2) -> mult#1(@b1, @b2)
        , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
        , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
        , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
        , +(@x, @y) -> #add(@x, @y)
        , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
        , sum#4(#false()) ->
          tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
        , *(@x, @y) -> #mult(@x, @y)
        , #less(@x, @y) -> #cklt(#compare(@x, @y))
        , #equal(@x, @y) -> #eq(@x, @y)
        , #eq(nil(), nil()) -> #true()
        , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(nil(), ::(@y_1, @y_2)) -> #false()
        , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
        , #eq(#neg(@x), #pos(@y)) -> #false()
        , #eq(#neg(@x), #0()) -> #false()
        , #eq(#pos(@x), #neg(@y)) -> #false()
        , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
        , #eq(#pos(@x), #0()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
        , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), nil()) -> #false()
        , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
        , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
          #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
        , #eq(#0(), #neg(@y)) -> #false()
        , #eq(#0(), #pos(@y)) -> #false()
        , #eq(#0(), #0()) -> #true()
        , #eq(#0(), #s(@y)) -> #false()
        , #eq(#s(@x), #0()) -> #false()
        , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
        , #natmult(#0(), @y) -> #0()
        , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
        , #cklt(#EQ()) -> #false()
        , #cklt(#LT()) -> #true()
        , #cklt(#GT()) -> #false()
        , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
        , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
        , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
        , #sub(@x, #0()) -> @x
        , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
        , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
        , mult#3(#false(), @b2, @zs) -> @zs
        , add'#1(nil(), @b2, @r) -> nil()
        , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
        , add'#2(nil(), @r, @x, @xs) -> nil()
        , add'#2(::(@y, @ys), @r, @x, @xs) ->
          add'#3(sum(@x, @y, @r), @xs, @ys)
        , diff(@x, @y, @r) ->
          tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                  diff#1(#less(-(-(@x, @y), @r), #0())))
        , mult#1(nil(), @b2) -> nil()
        , mult#1(::(@x, @xs), @b2) ->
          mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
        , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#neg(@x), #0()) -> #0()
        , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
        , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
        , #mult(#pos(@x), #0()) -> #0()
        , #mult(#0(), #neg(@y)) -> #0()
        , #mult(#0(), #pos(@y)) -> #0()
        , #mult(#0(), #0()) -> #0()
        , #succ(#neg(#s(#0()))) -> #0()
        , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
        , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
        , #succ(#0()) -> #pos(#s(#0()))
        , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
        , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
        , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#neg(@x), #0()) -> #divByZero()
        , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
        , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
        , #div(#pos(@x), #0()) -> #divByZero()
        , #div(#0(), #neg(@y)) -> #0()
        , #div(#0(), #pos(@y)) -> #0()
        , #div(#0(), #0()) -> #divByZero()
        , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
        , #abs(#neg(@x)) -> #pos(@x)
        , #abs(#pos(@x)) -> #pos(@x)
        , #abs(#0()) -> #0()
        , #abs(#s(@x)) -> #pos(#s(@x))
        , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
        , #pred(#pos(#s(#0()))) -> #0()
        , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
        , #pred(#0()) -> #neg(#s(#0())) }
      Obligation:
        innermost runtime complexity
      Answer:
        YES(O(1),O(n^1))
      
      We analyse the complexity of following sub-problems (R) and (S).
      Problem (S) is obtained from the input problem by shifting strict
      rules from (R) into the weak component:
      
      Problem (R):
      ------------
        Strict DPs:
          { bitToInt'#1^#(::(@x, @xs), @n) ->
            c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
          , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
          , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
        Weak DPs:
          { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
          , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
          , compare#1^#(::(@x, @xs), @b2) ->
            c_22(compare#2^#(@b2, @x, @xs)) }
        Weak Trs:
          { #natsub(@x, #0()) -> @x
          , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
          , -(@x, @y) -> #sub(@x, @y)
          , diff#1(#true()) -> #abs(#pos(#s(#0())))
          , diff#1(#false()) -> #abs(#0())
          , #natdiv(#0(), #0()) -> #divByZero()
          , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
          , #add(#neg(#s(#0())), @y) -> #pred(@y)
          , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
          , #add(#pos(#s(#0())), @y) -> #succ(@y)
          , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
          , #add(#0(), @y) -> @y
          , mult#2(@zs, @b2, @x) ->
            mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
          , div(@x, @y) -> #div(@x, @y)
          , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
          , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
          , #and(#true(), #true()) -> #true()
          , #and(#true(), #false()) -> #false()
          , #and(#false(), #true()) -> #false()
          , #and(#false(), #false()) -> #false()
          , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
          , #compare(#neg(@x), #pos(@y)) -> #LT()
          , #compare(#neg(@x), #0()) -> #LT()
          , #compare(#pos(@x), #neg(@y)) -> #GT()
          , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
          , #compare(#pos(@x), #0()) -> #GT()
          , #compare(#0(), #neg(@y)) -> #GT()
          , #compare(#0(), #pos(@y)) -> #LT()
          , #compare(#0(), #0()) -> #EQ()
          , #compare(#0(), #s(@y)) -> #LT()
          , #compare(#s(@x), #0()) -> #GT()
          , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
          , mult(@b1, @b2) -> mult#1(@b1, @b2)
          , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
          , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
          , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
          , +(@x, @y) -> #add(@x, @y)
          , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
          , sum#4(#false()) ->
            tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
          , *(@x, @y) -> #mult(@x, @y)
          , #less(@x, @y) -> #cklt(#compare(@x, @y))
          , #equal(@x, @y) -> #eq(@x, @y)
          , #eq(nil(), nil()) -> #true()
          , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(nil(), ::(@y_1, @y_2)) -> #false()
          , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
          , #eq(#neg(@x), #pos(@y)) -> #false()
          , #eq(#neg(@x), #0()) -> #false()
          , #eq(#pos(@x), #neg(@y)) -> #false()
          , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
          , #eq(#pos(@x), #0()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), nil()) -> #false()
          , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(#0(), #neg(@y)) -> #false()
          , #eq(#0(), #pos(@y)) -> #false()
          , #eq(#0(), #0()) -> #true()
          , #eq(#0(), #s(@y)) -> #false()
          , #eq(#s(@x), #0()) -> #false()
          , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
          , #natmult(#0(), @y) -> #0()
          , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
          , #cklt(#EQ()) -> #false()
          , #cklt(#LT()) -> #true()
          , #cklt(#GT()) -> #false()
          , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
          , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
          , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
          , #sub(@x, #0()) -> @x
          , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
          , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
          , mult#3(#false(), @b2, @zs) -> @zs
          , add'#1(nil(), @b2, @r) -> nil()
          , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
          , add'#2(nil(), @r, @x, @xs) -> nil()
          , add'#2(::(@y, @ys), @r, @x, @xs) ->
            add'#3(sum(@x, @y, @r), @xs, @ys)
          , diff(@x, @y, @r) ->
            tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                    diff#1(#less(-(-(@x, @y), @r), #0())))
          , mult#1(nil(), @b2) -> nil()
          , mult#1(::(@x, @xs), @b2) ->
            mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
          , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
          , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
          , #mult(#neg(@x), #0()) -> #0()
          , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
          , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
          , #mult(#pos(@x), #0()) -> #0()
          , #mult(#0(), #neg(@y)) -> #0()
          , #mult(#0(), #pos(@y)) -> #0()
          , #mult(#0(), #0()) -> #0()
          , #succ(#neg(#s(#0()))) -> #0()
          , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
          , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
          , #succ(#0()) -> #pos(#s(#0()))
          , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
          , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
          , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
          , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
          , #div(#neg(@x), #0()) -> #divByZero()
          , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
          , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
          , #div(#pos(@x), #0()) -> #divByZero()
          , #div(#0(), #neg(@y)) -> #0()
          , #div(#0(), #pos(@y)) -> #0()
          , #div(#0(), #0()) -> #divByZero()
          , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
          , #abs(#neg(@x)) -> #pos(@x)
          , #abs(#pos(@x)) -> #pos(@x)
          , #abs(#0()) -> #0()
          , #abs(#s(@x)) -> #pos(#s(@x))
          , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
          , #pred(#pos(#s(#0()))) -> #0()
          , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
          , #pred(#0()) -> #neg(#s(#0())) }
        StartTerms: basic terms
        Strategy: innermost
      
      Problem (S):
      ------------
        Strict DPs:
          { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
          , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
          , compare#1^#(::(@x, @xs), @b2) ->
            c_22(compare#2^#(@b2, @x, @xs)) }
        Weak DPs:
          { bitToInt'#1^#(::(@x, @xs), @n) ->
            c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
          , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
          , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
        Weak Trs:
          { #natsub(@x, #0()) -> @x
          , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
          , -(@x, @y) -> #sub(@x, @y)
          , diff#1(#true()) -> #abs(#pos(#s(#0())))
          , diff#1(#false()) -> #abs(#0())
          , #natdiv(#0(), #0()) -> #divByZero()
          , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
          , #add(#neg(#s(#0())), @y) -> #pred(@y)
          , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
          , #add(#pos(#s(#0())), @y) -> #succ(@y)
          , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
          , #add(#0(), @y) -> @y
          , mult#2(@zs, @b2, @x) ->
            mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
          , div(@x, @y) -> #div(@x, @y)
          , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
          , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
          , #and(#true(), #true()) -> #true()
          , #and(#true(), #false()) -> #false()
          , #and(#false(), #true()) -> #false()
          , #and(#false(), #false()) -> #false()
          , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
          , #compare(#neg(@x), #pos(@y)) -> #LT()
          , #compare(#neg(@x), #0()) -> #LT()
          , #compare(#pos(@x), #neg(@y)) -> #GT()
          , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
          , #compare(#pos(@x), #0()) -> #GT()
          , #compare(#0(), #neg(@y)) -> #GT()
          , #compare(#0(), #pos(@y)) -> #LT()
          , #compare(#0(), #0()) -> #EQ()
          , #compare(#0(), #s(@y)) -> #LT()
          , #compare(#s(@x), #0()) -> #GT()
          , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
          , mult(@b1, @b2) -> mult#1(@b1, @b2)
          , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
          , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
          , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
          , +(@x, @y) -> #add(@x, @y)
          , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
          , sum#4(#false()) ->
            tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
          , *(@x, @y) -> #mult(@x, @y)
          , #less(@x, @y) -> #cklt(#compare(@x, @y))
          , #equal(@x, @y) -> #eq(@x, @y)
          , #eq(nil(), nil()) -> #true()
          , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(nil(), ::(@y_1, @y_2)) -> #false()
          , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
          , #eq(#neg(@x), #pos(@y)) -> #false()
          , #eq(#neg(@x), #0()) -> #false()
          , #eq(#pos(@x), #neg(@y)) -> #false()
          , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
          , #eq(#pos(@x), #0()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
          , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), nil()) -> #false()
          , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
          , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
            #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
          , #eq(#0(), #neg(@y)) -> #false()
          , #eq(#0(), #pos(@y)) -> #false()
          , #eq(#0(), #0()) -> #true()
          , #eq(#0(), #s(@y)) -> #false()
          , #eq(#s(@x), #0()) -> #false()
          , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
          , #natmult(#0(), @y) -> #0()
          , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
          , #cklt(#EQ()) -> #false()
          , #cklt(#LT()) -> #true()
          , #cklt(#GT()) -> #false()
          , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
          , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
          , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
          , #sub(@x, #0()) -> @x
          , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
          , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
          , mult#3(#false(), @b2, @zs) -> @zs
          , add'#1(nil(), @b2, @r) -> nil()
          , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
          , add'#2(nil(), @r, @x, @xs) -> nil()
          , add'#2(::(@y, @ys), @r, @x, @xs) ->
            add'#3(sum(@x, @y, @r), @xs, @ys)
          , diff(@x, @y, @r) ->
            tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                    diff#1(#less(-(-(@x, @y), @r), #0())))
          , mult#1(nil(), @b2) -> nil()
          , mult#1(::(@x, @xs), @b2) ->
            mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
          , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
          , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
          , #mult(#neg(@x), #0()) -> #0()
          , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
          , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
          , #mult(#pos(@x), #0()) -> #0()
          , #mult(#0(), #neg(@y)) -> #0()
          , #mult(#0(), #pos(@y)) -> #0()
          , #mult(#0(), #0()) -> #0()
          , #succ(#neg(#s(#0()))) -> #0()
          , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
          , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
          , #succ(#0()) -> #pos(#s(#0()))
          , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
          , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
          , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
          , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
          , #div(#neg(@x), #0()) -> #divByZero()
          , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
          , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
          , #div(#pos(@x), #0()) -> #divByZero()
          , #div(#0(), #neg(@y)) -> #0()
          , #div(#0(), #pos(@y)) -> #0()
          , #div(#0(), #0()) -> #divByZero()
          , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
          , #abs(#neg(@x)) -> #pos(@x)
          , #abs(#pos(@x)) -> #pos(@x)
          , #abs(#0()) -> #0()
          , #abs(#s(@x)) -> #pos(#s(@x))
          , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
          , #pred(#pos(#s(#0()))) -> #0()
          , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
          , #pred(#0()) -> #neg(#s(#0())) }
        StartTerms: basic terms
        Strategy: innermost
      
      Overall, the transformation results in the following sub-problem(s):
      
      Generated new problems:
      -----------------------
      R) Strict DPs:
           { bitToInt'#1^#(::(@x, @xs), @n) ->
             c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
           , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         Weak DPs:
           { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
           , compare#1^#(::(@x, @xs), @b2) ->
             c_22(compare#2^#(@b2, @x, @xs)) }
         Weak Trs:
           { #natsub(@x, #0()) -> @x
           , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
           , -(@x, @y) -> #sub(@x, @y)
           , diff#1(#true()) -> #abs(#pos(#s(#0())))
           , diff#1(#false()) -> #abs(#0())
           , #natdiv(#0(), #0()) -> #divByZero()
           , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
           , #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , mult#2(@zs, @b2, @x) ->
             mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
           , div(@x, @y) -> #div(@x, @y)
           , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
           , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
           , #and(#true(), #true()) -> #true()
           , #and(#true(), #false()) -> #false()
           , #and(#false(), #true()) -> #false()
           , #and(#false(), #false()) -> #false()
           , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
           , #compare(#neg(@x), #pos(@y)) -> #LT()
           , #compare(#neg(@x), #0()) -> #LT()
           , #compare(#pos(@x), #neg(@y)) -> #GT()
           , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
           , #compare(#pos(@x), #0()) -> #GT()
           , #compare(#0(), #neg(@y)) -> #GT()
           , #compare(#0(), #pos(@y)) -> #LT()
           , #compare(#0(), #0()) -> #EQ()
           , #compare(#0(), #s(@y)) -> #LT()
           , #compare(#s(@x), #0()) -> #GT()
           , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
           , mult(@b1, @b2) -> mult#1(@b1, @b2)
           , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
           , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
           , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
           , +(@x, @y) -> #add(@x, @y)
           , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
           , sum#4(#false()) ->
             tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
           , *(@x, @y) -> #mult(@x, @y)
           , #less(@x, @y) -> #cklt(#compare(@x, @y))
           , #equal(@x, @y) -> #eq(@x, @y)
           , #eq(nil(), nil()) -> #true()
           , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(nil(), ::(@y_1, @y_2)) -> #false()
           , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
           , #eq(#neg(@x), #pos(@y)) -> #false()
           , #eq(#neg(@x), #0()) -> #false()
           , #eq(#pos(@x), #neg(@y)) -> #false()
           , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
           , #eq(#pos(@x), #0()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), nil()) -> #false()
           , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(#0(), #neg(@y)) -> #false()
           , #eq(#0(), #pos(@y)) -> #false()
           , #eq(#0(), #0()) -> #true()
           , #eq(#0(), #s(@y)) -> #false()
           , #eq(#s(@x), #0()) -> #false()
           , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #cklt(#EQ()) -> #false()
           , #cklt(#LT()) -> #true()
           , #cklt(#GT()) -> #false()
           , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
           , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
           , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
           , #sub(@x, #0()) -> @x
           , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
           , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
           , mult#3(#false(), @b2, @zs) -> @zs
           , add'#1(nil(), @b2, @r) -> nil()
           , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
           , add'#2(nil(), @r, @x, @xs) -> nil()
           , add'#2(::(@y, @ys), @r, @x, @xs) ->
             add'#3(sum(@x, @y, @r), @xs, @ys)
           , diff(@x, @y, @r) ->
             tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                     diff#1(#less(-(-(@x, @y), @r), #0())))
           , mult#1(nil(), @b2) -> nil()
           , mult#1(::(@x, @xs), @b2) ->
             mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
           , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
           , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#neg(@x), #0()) -> #divByZero()
           , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#pos(@x), #0()) -> #divByZero()
           , #div(#0(), #neg(@y)) -> #0()
           , #div(#0(), #pos(@y)) -> #0()
           , #div(#0(), #0()) -> #divByZero()
           , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         StartTerms: basic terms
         Strategy: innermost
         
         This problem was proven YES(O(1),O(n^1)).
      
      S) Strict DPs:
           { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
           , compare#1^#(::(@x, @xs), @b2) ->
             c_22(compare#2^#(@b2, @x, @xs)) }
         Weak DPs:
           { bitToInt'#1^#(::(@x, @xs), @n) ->
             c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
           , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         Weak Trs:
           { #natsub(@x, #0()) -> @x
           , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
           , -(@x, @y) -> #sub(@x, @y)
           , diff#1(#true()) -> #abs(#pos(#s(#0())))
           , diff#1(#false()) -> #abs(#0())
           , #natdiv(#0(), #0()) -> #divByZero()
           , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
           , #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , mult#2(@zs, @b2, @x) ->
             mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
           , div(@x, @y) -> #div(@x, @y)
           , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
           , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
           , #and(#true(), #true()) -> #true()
           , #and(#true(), #false()) -> #false()
           , #and(#false(), #true()) -> #false()
           , #and(#false(), #false()) -> #false()
           , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
           , #compare(#neg(@x), #pos(@y)) -> #LT()
           , #compare(#neg(@x), #0()) -> #LT()
           , #compare(#pos(@x), #neg(@y)) -> #GT()
           , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
           , #compare(#pos(@x), #0()) -> #GT()
           , #compare(#0(), #neg(@y)) -> #GT()
           , #compare(#0(), #pos(@y)) -> #LT()
           , #compare(#0(), #0()) -> #EQ()
           , #compare(#0(), #s(@y)) -> #LT()
           , #compare(#s(@x), #0()) -> #GT()
           , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
           , mult(@b1, @b2) -> mult#1(@b1, @b2)
           , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
           , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
           , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
           , +(@x, @y) -> #add(@x, @y)
           , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
           , sum#4(#false()) ->
             tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
           , *(@x, @y) -> #mult(@x, @y)
           , #less(@x, @y) -> #cklt(#compare(@x, @y))
           , #equal(@x, @y) -> #eq(@x, @y)
           , #eq(nil(), nil()) -> #true()
           , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(nil(), ::(@y_1, @y_2)) -> #false()
           , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
           , #eq(#neg(@x), #pos(@y)) -> #false()
           , #eq(#neg(@x), #0()) -> #false()
           , #eq(#pos(@x), #neg(@y)) -> #false()
           , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
           , #eq(#pos(@x), #0()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), nil()) -> #false()
           , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(#0(), #neg(@y)) -> #false()
           , #eq(#0(), #pos(@y)) -> #false()
           , #eq(#0(), #0()) -> #true()
           , #eq(#0(), #s(@y)) -> #false()
           , #eq(#s(@x), #0()) -> #false()
           , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #cklt(#EQ()) -> #false()
           , #cklt(#LT()) -> #true()
           , #cklt(#GT()) -> #false()
           , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
           , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
           , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
           , #sub(@x, #0()) -> @x
           , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
           , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
           , mult#3(#false(), @b2, @zs) -> @zs
           , add'#1(nil(), @b2, @r) -> nil()
           , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
           , add'#2(nil(), @r, @x, @xs) -> nil()
           , add'#2(::(@y, @ys), @r, @x, @xs) ->
             add'#3(sum(@x, @y, @r), @xs, @ys)
           , diff(@x, @y, @r) ->
             tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                     diff#1(#less(-(-(@x, @y), @r), #0())))
           , mult#1(nil(), @b2) -> nil()
           , mult#1(::(@x, @xs), @b2) ->
             mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
           , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
           , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#neg(@x), #0()) -> #divByZero()
           , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#pos(@x), #0()) -> #divByZero()
           , #div(#0(), #neg(@y)) -> #0()
           , #div(#0(), #pos(@y)) -> #0()
           , #div(#0(), #0()) -> #divByZero()
           , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         StartTerms: basic terms
         Strategy: innermost
         
         This problem was proven YES(O(1),O(n^1)).
      
      
      Proofs for generated problems:
      ------------------------------
      R) We are left with following problem, upon which TcT provides the
         certificate YES(O(1),O(n^1)).
         
         Strict DPs:
           { bitToInt'#1^#(::(@x, @xs), @n) ->
             c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
           , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         Weak DPs:
           { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
           , compare#1^#(::(@x, @xs), @b2) ->
             c_22(compare#2^#(@b2, @x, @xs)) }
         Weak Trs:
           { #natsub(@x, #0()) -> @x
           , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
           , -(@x, @y) -> #sub(@x, @y)
           , diff#1(#true()) -> #abs(#pos(#s(#0())))
           , diff#1(#false()) -> #abs(#0())
           , #natdiv(#0(), #0()) -> #divByZero()
           , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
           , #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , mult#2(@zs, @b2, @x) ->
             mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
           , div(@x, @y) -> #div(@x, @y)
           , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
           , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
           , #and(#true(), #true()) -> #true()
           , #and(#true(), #false()) -> #false()
           , #and(#false(), #true()) -> #false()
           , #and(#false(), #false()) -> #false()
           , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
           , #compare(#neg(@x), #pos(@y)) -> #LT()
           , #compare(#neg(@x), #0()) -> #LT()
           , #compare(#pos(@x), #neg(@y)) -> #GT()
           , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
           , #compare(#pos(@x), #0()) -> #GT()
           , #compare(#0(), #neg(@y)) -> #GT()
           , #compare(#0(), #pos(@y)) -> #LT()
           , #compare(#0(), #0()) -> #EQ()
           , #compare(#0(), #s(@y)) -> #LT()
           , #compare(#s(@x), #0()) -> #GT()
           , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
           , mult(@b1, @b2) -> mult#1(@b1, @b2)
           , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
           , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
           , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
           , +(@x, @y) -> #add(@x, @y)
           , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
           , sum#4(#false()) ->
             tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
           , *(@x, @y) -> #mult(@x, @y)
           , #less(@x, @y) -> #cklt(#compare(@x, @y))
           , #equal(@x, @y) -> #eq(@x, @y)
           , #eq(nil(), nil()) -> #true()
           , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(nil(), ::(@y_1, @y_2)) -> #false()
           , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
           , #eq(#neg(@x), #pos(@y)) -> #false()
           , #eq(#neg(@x), #0()) -> #false()
           , #eq(#pos(@x), #neg(@y)) -> #false()
           , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
           , #eq(#pos(@x), #0()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), nil()) -> #false()
           , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(#0(), #neg(@y)) -> #false()
           , #eq(#0(), #pos(@y)) -> #false()
           , #eq(#0(), #0()) -> #true()
           , #eq(#0(), #s(@y)) -> #false()
           , #eq(#s(@x), #0()) -> #false()
           , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #cklt(#EQ()) -> #false()
           , #cklt(#LT()) -> #true()
           , #cklt(#GT()) -> #false()
           , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
           , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
           , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
           , #sub(@x, #0()) -> @x
           , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
           , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
           , mult#3(#false(), @b2, @zs) -> @zs
           , add'#1(nil(), @b2, @r) -> nil()
           , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
           , add'#2(nil(), @r, @x, @xs) -> nil()
           , add'#2(::(@y, @ys), @r, @x, @xs) ->
             add'#3(sum(@x, @y, @r), @xs, @ys)
           , diff(@x, @y, @r) ->
             tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                     diff#1(#less(-(-(@x, @y), @r), #0())))
           , mult#1(nil(), @b2) -> nil()
           , mult#1(::(@x, @xs), @b2) ->
             mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
           , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
           , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#neg(@x), #0()) -> #divByZero()
           , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#pos(@x), #0()) -> #divByZero()
           , #div(#0(), #neg(@y)) -> #0()
           , #div(#0(), #pos(@y)) -> #0()
           , #div(#0(), #0()) -> #divByZero()
           , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         Obligation:
           innermost runtime complexity
         Answer:
           YES(O(1),O(n^1))
         
         The following weak DPs constitute a sub-graph of the DG that is
         closed under successors. The DPs are removed.
         
         { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
         , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
         , compare#1^#(::(@x, @xs), @b2) ->
           c_22(compare#2^#(@b2, @x, @xs)) }
         
         We are left with following problem, upon which TcT provides the
         certificate YES(O(1),O(n^1)).
         
         Strict DPs:
           { bitToInt'#1^#(::(@x, @xs), @n) ->
             c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
           , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         Weak Trs:
           { #natsub(@x, #0()) -> @x
           , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
           , -(@x, @y) -> #sub(@x, @y)
           , diff#1(#true()) -> #abs(#pos(#s(#0())))
           , diff#1(#false()) -> #abs(#0())
           , #natdiv(#0(), #0()) -> #divByZero()
           , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
           , #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , mult#2(@zs, @b2, @x) ->
             mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
           , div(@x, @y) -> #div(@x, @y)
           , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
           , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
           , #and(#true(), #true()) -> #true()
           , #and(#true(), #false()) -> #false()
           , #and(#false(), #true()) -> #false()
           , #and(#false(), #false()) -> #false()
           , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
           , #compare(#neg(@x), #pos(@y)) -> #LT()
           , #compare(#neg(@x), #0()) -> #LT()
           , #compare(#pos(@x), #neg(@y)) -> #GT()
           , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
           , #compare(#pos(@x), #0()) -> #GT()
           , #compare(#0(), #neg(@y)) -> #GT()
           , #compare(#0(), #pos(@y)) -> #LT()
           , #compare(#0(), #0()) -> #EQ()
           , #compare(#0(), #s(@y)) -> #LT()
           , #compare(#s(@x), #0()) -> #GT()
           , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
           , mult(@b1, @b2) -> mult#1(@b1, @b2)
           , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
           , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
           , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
           , +(@x, @y) -> #add(@x, @y)
           , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
           , sum#4(#false()) ->
             tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
           , *(@x, @y) -> #mult(@x, @y)
           , #less(@x, @y) -> #cklt(#compare(@x, @y))
           , #equal(@x, @y) -> #eq(@x, @y)
           , #eq(nil(), nil()) -> #true()
           , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(nil(), ::(@y_1, @y_2)) -> #false()
           , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
           , #eq(#neg(@x), #pos(@y)) -> #false()
           , #eq(#neg(@x), #0()) -> #false()
           , #eq(#pos(@x), #neg(@y)) -> #false()
           , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
           , #eq(#pos(@x), #0()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), nil()) -> #false()
           , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(#0(), #neg(@y)) -> #false()
           , #eq(#0(), #pos(@y)) -> #false()
           , #eq(#0(), #0()) -> #true()
           , #eq(#0(), #s(@y)) -> #false()
           , #eq(#s(@x), #0()) -> #false()
           , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #cklt(#EQ()) -> #false()
           , #cklt(#LT()) -> #true()
           , #cklt(#GT()) -> #false()
           , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
           , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
           , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
           , #sub(@x, #0()) -> @x
           , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
           , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
           , mult#3(#false(), @b2, @zs) -> @zs
           , add'#1(nil(), @b2, @r) -> nil()
           , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
           , add'#2(nil(), @r, @x, @xs) -> nil()
           , add'#2(::(@y, @ys), @r, @x, @xs) ->
             add'#3(sum(@x, @y, @r), @xs, @ys)
           , diff(@x, @y, @r) ->
             tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                     diff#1(#less(-(-(@x, @y), @r), #0())))
           , mult#1(nil(), @b2) -> nil()
           , mult#1(::(@x, @xs), @b2) ->
             mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
           , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
           , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#neg(@x), #0()) -> #divByZero()
           , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#pos(@x), #0()) -> #divByZero()
           , #div(#0(), #neg(@y)) -> #0()
           , #div(#0(), #pos(@y)) -> #0()
           , #div(#0(), #0()) -> #divByZero()
           , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         Obligation:
           innermost runtime complexity
         Answer:
           YES(O(1),O(n^1))
         
         We replace rewrite rules by usable rules:
         
           Weak Usable Rules:
             { #add(#neg(#s(#0())), @y) -> #pred(@y)
             , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
             , #add(#pos(#s(#0())), @y) -> #succ(@y)
             , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
             , #add(#0(), @y) -> @y
             , *(@x, @y) -> #mult(@x, @y)
             , #natmult(#0(), @y) -> #0()
             , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
             , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
             , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
             , #mult(#neg(@x), #0()) -> #0()
             , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
             , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
             , #mult(#pos(@x), #0()) -> #0()
             , #mult(#0(), #neg(@y)) -> #0()
             , #mult(#0(), #pos(@y)) -> #0()
             , #mult(#0(), #0()) -> #0()
             , #succ(#neg(#s(#0()))) -> #0()
             , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
             , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
             , #succ(#0()) -> #pos(#s(#0()))
             , #abs(#neg(@x)) -> #pos(@x)
             , #abs(#pos(@x)) -> #pos(@x)
             , #abs(#0()) -> #0()
             , #abs(#s(@x)) -> #pos(#s(@x))
             , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
             , #pred(#pos(#s(#0()))) -> #0()
             , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
             , #pred(#0()) -> #neg(#s(#0())) }
         
         We are left with following problem, upon which TcT provides the
         certificate YES(O(1),O(n^1)).
         
         Strict DPs:
           { bitToInt'#1^#(::(@x, @xs), @n) ->
             c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
           , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         Weak Trs:
           { #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , *(@x, @y) -> #mult(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         Obligation:
           innermost runtime complexity
         Answer:
           YES(O(1),O(n^1))
         
         We use the processor 'matrix interpretation of dimension 1' to
         orient following rules strictly.
         
         DPs:
           { 2: bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , 3: bitToInt^#(@b) ->
                c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         Trs: { *(@x, @y) -> #mult(@x, @y) }
         
         Sub-proof:
         ----------
           The following argument positions are usable:
             Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_12) = {1}
           
           TcT has computed the following constructor-based matrix
           interpretation satisfying not(EDA).
           
                      [#add](x1, x2) = [0]                  
                                                            
                         [*](x1, x2) = [4]                  
                                                            
                          [#neg](x1) = [0]                  
                                                            
                  [#natmult](x1, x2) = [0]                  
                                                            
                          [#pos](x1) = [0]                  
                                                            
                        [::](x1, x2) = [1] x2 + [2]         
                                                            
                     [#mult](x1, x2) = [0]                  
                                                            
                         [#succ](x1) = [0]                  
                                                            
                                [#0] = [0]                  
                                                            
                          [#abs](x1) = [0]                  
                                                            
                         [#pred](x1) = [0]                  
                                                            
                            [#s](x1) = [0]                  
                                                            
             [bitToInt'#1^#](x1, x2) = [4] x1 + [0]         
                                                            
               [bitToInt'^#](x1, x2) = [4] x1 + [1] x2 + [4]
                                                            
                    [bitToInt^#](x1) = [7] x1 + [7]         
                                                            
                           [c_5](x1) = [1] x1 + [0]         
                                                            
                           [c_6](x1) = [1] x1 + [1]         
                                                            
                          [c_12](x1) = [1] x1 + [0]         
           
           The order satisfies the following ordering constraints:
           
                   [#add(#neg(#s(#0())), @y)] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pred(@y)]                                       
                                                                                                   
                 [#add(#neg(#s(#s(@x))), @y)] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pred(#add(#pos(#s(@x)), @y))]                   
                                                                                                   
                   [#add(#pos(#s(#0())), @y)] =  [0]                                               
                                              >= [0]                                               
                                              =  [#succ(@y)]                                       
                                                                                                   
                 [#add(#pos(#s(#s(@x))), @y)] =  [0]                                               
                                              >= [0]                                               
                                              =  [#succ(#add(#pos(#s(@x)), @y))]                   
                                                                                                   
                             [#add(#0(), @y)] =  [0]                                               
                                              ?  [1] @y + [0]                                      
                                              =  [@y]                                              
                                                                                                   
                                  [*(@x, @y)] =  [4]                                               
                                              >  [0]                                               
                                              =  [#mult(@x, @y)]                                   
                                                                                                   
                         [#natmult(#0(), @y)] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                       [#natmult(#s(@x), @y)] =  [0]                                               
                                              >= [0]                                               
                                              =  [#add(#pos(@y), #natmult(@x, @y))]                
                                                                                                   
                  [#mult(#neg(@x), #neg(@y))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pos(#natmult(@x, @y))]                          
                                                                                                   
                  [#mult(#neg(@x), #pos(@y))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#neg(#natmult(@x, @y))]                          
                                                                                                   
                      [#mult(#neg(@x), #0())] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                  [#mult(#pos(@x), #neg(@y))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#neg(#natmult(@x, @y))]                          
                                                                                                   
                  [#mult(#pos(@x), #pos(@y))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pos(#natmult(@x, @y))]                          
                                                                                                   
                      [#mult(#pos(@x), #0())] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                      [#mult(#0(), #neg(@y))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                      [#mult(#0(), #pos(@y))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                          [#mult(#0(), #0())] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                      [#succ(#neg(#s(#0())))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                    [#succ(#neg(#s(#s(@x))))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#neg(#s(@x))]                                    
                                                                                                   
                        [#succ(#pos(#s(@x)))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pos(#s(#s(@x)))]                                
                                                                                                   
                                [#succ(#0())] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pos(#s(#0()))]                                  
                                                                                                   
                             [#abs(#neg(@x))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pos(@x)]                                        
                                                                                                   
                             [#abs(#pos(@x))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pos(@x)]                                        
                                                                                                   
                                 [#abs(#0())] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                               [#abs(#s(@x))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pos(#s(@x))]                                    
                                                                                                   
                        [#pred(#neg(#s(@x)))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#neg(#s(#s(@x)))]                                
                                                                                                   
                      [#pred(#pos(#s(#0())))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#0()]                                            
                                                                                                   
                    [#pred(#pos(#s(#s(@x))))] =  [0]                                               
                                              >= [0]                                               
                                              =  [#pos(#s(@x))]                                    
                                                                                                   
                                [#pred(#0())] =  [0]                                               
                                              >= [0]                                               
                                              =  [#neg(#s(#0()))]                                  
                                                                                                   
             [bitToInt'#1^#(::(@x, @xs), @n)] =  [4] @xs + [8]                                     
                                              >= [4] @xs + [8]                                     
                                              =  [c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))]
                                                                                                   
                        [bitToInt'^#(@b, @n)] =  [4] @b + [1] @n + [4]                             
                                              >  [4] @b + [1]                                      
                                              =  [c_6(bitToInt'#1^#(@b, @n))]                      
                                                                                                   
                             [bitToInt^#(@b)] =  [7] @b + [7]                                      
                                              >  [4] @b + [4]                                      
                                              =  [c_12(bitToInt'^#(@b, #abs(#pos(#s(#0())))))]     
                                                                                                   
         
         We return to the main proof. Consider the set of all dependency
         pairs
         
         :
           { 1: bitToInt'#1^#(::(@x, @xs), @n) ->
                c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
           , 2: bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , 3: bitToInt^#(@b) ->
                c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         
         Processor 'matrix interpretation of dimension 1' induces the
         complexity certificate YES(?,O(n^1)) on application of dependency
         pairs {2,3}. These cover all (indirect) predecessors of dependency
         pairs {1,2,3}, their number of application is equally bounded. The
         dependency pairs are shifted into the weak component.
         
         We are left with following problem, upon which TcT provides the
         certificate YES(O(1),O(1)).
         
         Weak DPs:
           { bitToInt'#1^#(::(@x, @xs), @n) ->
             c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
           , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         Weak Trs:
           { #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , *(@x, @y) -> #mult(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         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.
         
         { bitToInt'#1^#(::(@x, @xs), @n) ->
           c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
         , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
         , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         
         We are left with following problem, upon which TcT provides the
         certificate YES(O(1),O(1)).
         
         Weak Trs:
           { #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , *(@x, @y) -> #mult(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         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
      
      S) We are left with following problem, upon which TcT provides the
         certificate YES(O(1),O(n^1)).
         
         Strict DPs:
           { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
           , compare#1^#(::(@x, @xs), @b2) ->
             c_22(compare#2^#(@b2, @x, @xs)) }
         Weak DPs:
           { bitToInt'#1^#(::(@x, @xs), @n) ->
             c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
           , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
           , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         Weak Trs:
           { #natsub(@x, #0()) -> @x
           , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
           , -(@x, @y) -> #sub(@x, @y)
           , diff#1(#true()) -> #abs(#pos(#s(#0())))
           , diff#1(#false()) -> #abs(#0())
           , #natdiv(#0(), #0()) -> #divByZero()
           , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
           , #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , mult#2(@zs, @b2, @x) ->
             mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
           , div(@x, @y) -> #div(@x, @y)
           , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
           , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
           , #and(#true(), #true()) -> #true()
           , #and(#true(), #false()) -> #false()
           , #and(#false(), #true()) -> #false()
           , #and(#false(), #false()) -> #false()
           , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
           , #compare(#neg(@x), #pos(@y)) -> #LT()
           , #compare(#neg(@x), #0()) -> #LT()
           , #compare(#pos(@x), #neg(@y)) -> #GT()
           , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
           , #compare(#pos(@x), #0()) -> #GT()
           , #compare(#0(), #neg(@y)) -> #GT()
           , #compare(#0(), #pos(@y)) -> #LT()
           , #compare(#0(), #0()) -> #EQ()
           , #compare(#0(), #s(@y)) -> #LT()
           , #compare(#s(@x), #0()) -> #GT()
           , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
           , mult(@b1, @b2) -> mult#1(@b1, @b2)
           , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
           , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
           , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
           , +(@x, @y) -> #add(@x, @y)
           , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
           , sum#4(#false()) ->
             tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
           , *(@x, @y) -> #mult(@x, @y)
           , #less(@x, @y) -> #cklt(#compare(@x, @y))
           , #equal(@x, @y) -> #eq(@x, @y)
           , #eq(nil(), nil()) -> #true()
           , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(nil(), ::(@y_1, @y_2)) -> #false()
           , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
           , #eq(#neg(@x), #pos(@y)) -> #false()
           , #eq(#neg(@x), #0()) -> #false()
           , #eq(#pos(@x), #neg(@y)) -> #false()
           , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
           , #eq(#pos(@x), #0()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), nil()) -> #false()
           , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(#0(), #neg(@y)) -> #false()
           , #eq(#0(), #pos(@y)) -> #false()
           , #eq(#0(), #0()) -> #true()
           , #eq(#0(), #s(@y)) -> #false()
           , #eq(#s(@x), #0()) -> #false()
           , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #cklt(#EQ()) -> #false()
           , #cklt(#LT()) -> #true()
           , #cklt(#GT()) -> #false()
           , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
           , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
           , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
           , #sub(@x, #0()) -> @x
           , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
           , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
           , mult#3(#false(), @b2, @zs) -> @zs
           , add'#1(nil(), @b2, @r) -> nil()
           , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
           , add'#2(nil(), @r, @x, @xs) -> nil()
           , add'#2(::(@y, @ys), @r, @x, @xs) ->
             add'#3(sum(@x, @y, @r), @xs, @ys)
           , diff(@x, @y, @r) ->
             tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                     diff#1(#less(-(-(@x, @y), @r), #0())))
           , mult#1(nil(), @b2) -> nil()
           , mult#1(::(@x, @xs), @b2) ->
             mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
           , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
           , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#neg(@x), #0()) -> #divByZero()
           , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#pos(@x), #0()) -> #divByZero()
           , #div(#0(), #neg(@y)) -> #0()
           , #div(#0(), #pos(@y)) -> #0()
           , #div(#0(), #0()) -> #divByZero()
           , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         Obligation:
           innermost runtime complexity
         Answer:
           YES(O(1),O(n^1))
         
         The following weak DPs constitute a sub-graph of the DG that is
         closed under successors. The DPs are removed.
         
         { bitToInt'#1^#(::(@x, @xs), @n) ->
           c_5(bitToInt'^#(@xs, *(@n, #pos(#s(#s(#0()))))))
         , bitToInt'^#(@b, @n) -> c_6(bitToInt'#1^#(@b, @n))
         , bitToInt^#(@b) -> c_12(bitToInt'^#(@b, #abs(#pos(#s(#0()))))) }
         
         We are left with following problem, upon which TcT provides the
         certificate YES(O(1),O(n^1)).
         
         Strict DPs:
           { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
           , compare#1^#(::(@x, @xs), @b2) ->
             c_22(compare#2^#(@b2, @x, @xs)) }
         Weak Trs:
           { #natsub(@x, #0()) -> @x
           , #natsub(#s(@x), #s(@y)) -> #natsub(@x, @y)
           , -(@x, @y) -> #sub(@x, @y)
           , diff#1(#true()) -> #abs(#pos(#s(#0())))
           , diff#1(#false()) -> #abs(#0())
           , #natdiv(#0(), #0()) -> #divByZero()
           , #natdiv(#s(@x), #s(@y)) -> #s(#natdiv(#natsub(@x, @y), #s(@y)))
           , #add(#neg(#s(#0())), @y) -> #pred(@y)
           , #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y))
           , #add(#pos(#s(#0())), @y) -> #succ(@y)
           , #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y))
           , #add(#0(), @y) -> @y
           , mult#2(@zs, @b2, @x) ->
             mult#3(#equal(@x, #pos(#s(#0()))), @b2, @zs)
           , div(@x, @y) -> #div(@x, @y)
           , sum(@x, @y, @r) -> sum#1(+(+(@x, @y), @r))
           , mod(@x, @y) -> -(@x, *(@x, div(@x, @y)))
           , #and(#true(), #true()) -> #true()
           , #and(#true(), #false()) -> #false()
           , #and(#false(), #true()) -> #false()
           , #and(#false(), #false()) -> #false()
           , #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x)
           , #compare(#neg(@x), #pos(@y)) -> #LT()
           , #compare(#neg(@x), #0()) -> #LT()
           , #compare(#pos(@x), #neg(@y)) -> #GT()
           , #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y)
           , #compare(#pos(@x), #0()) -> #GT()
           , #compare(#0(), #neg(@y)) -> #GT()
           , #compare(#0(), #pos(@y)) -> #LT()
           , #compare(#0(), #0()) -> #EQ()
           , #compare(#0(), #s(@y)) -> #LT()
           , #compare(#s(@x), #0()) -> #GT()
           , #compare(#s(@x), #s(@y)) -> #compare(@x, @y)
           , mult(@b1, @b2) -> mult#1(@b1, @b2)
           , sum#2(#true(), @s) -> tuple#2(#abs(#0()), #abs(#0()))
           , sum#2(#false(), @s) -> sum#3(#equal(@s, #pos(#s(#0()))), @s)
           , sum#1(@s) -> sum#2(#equal(@s, #0()), @s)
           , +(@x, @y) -> #add(@x, @y)
           , sum#4(#true()) -> tuple#2(#abs(#0()), #abs(#pos(#s(#0()))))
           , sum#4(#false()) ->
             tuple#2(#abs(#pos(#s(#0()))), #abs(#pos(#s(#0()))))
           , *(@x, @y) -> #mult(@x, @y)
           , #less(@x, @y) -> #cklt(#compare(@x, @y))
           , #equal(@x, @y) -> #eq(@x, @y)
           , #eq(nil(), nil()) -> #true()
           , #eq(nil(), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(nil(), ::(@y_1, @y_2)) -> #false()
           , #eq(#neg(@x), #neg(@y)) -> #eq(@x, @y)
           , #eq(#neg(@x), #pos(@y)) -> #false()
           , #eq(#neg(@x), #0()) -> #false()
           , #eq(#pos(@x), #neg(@y)) -> #false()
           , #eq(#pos(@x), #pos(@y)) -> #eq(@x, @y)
           , #eq(#pos(@x), #0()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), nil()) -> #false()
           , #eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), nil()) -> #false()
           , #eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) -> #false()
           , #eq(::(@x_1, @x_2), ::(@y_1, @y_2)) ->
             #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
           , #eq(#0(), #neg(@y)) -> #false()
           , #eq(#0(), #pos(@y)) -> #false()
           , #eq(#0(), #0()) -> #true()
           , #eq(#0(), #s(@y)) -> #false()
           , #eq(#s(@x), #0()) -> #false()
           , #eq(#s(@x), #s(@y)) -> #eq(@x, @y)
           , #natmult(#0(), @y) -> #0()
           , #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y))
           , #cklt(#EQ()) -> #false()
           , #cklt(#LT()) -> #true()
           , #cklt(#GT()) -> #false()
           , add(@b1, @b2) -> add'(@b1, @b2, #abs(#0()))
           , #sub(@x, #neg(@y)) -> #add(@x, #pos(@y))
           , #sub(@x, #pos(@y)) -> #add(@x, #neg(@y))
           , #sub(@x, #0()) -> @x
           , add'#3(tuple#2(@z, @r'), @xs, @ys) -> ::(@z, add'(@xs, @ys, @r'))
           , mult#3(#true(), @b2, @zs) -> add(@b2, @zs)
           , mult#3(#false(), @b2, @zs) -> @zs
           , add'#1(nil(), @b2, @r) -> nil()
           , add'#1(::(@x, @xs), @b2, @r) -> add'#2(@b2, @r, @x, @xs)
           , add'#2(nil(), @r, @x, @xs) -> nil()
           , add'#2(::(@y, @ys), @r, @x, @xs) ->
             add'#3(sum(@x, @y, @r), @xs, @ys)
           , diff(@x, @y, @r) ->
             tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0())))),
                     diff#1(#less(-(-(@x, @y), @r), #0())))
           , mult#1(nil(), @b2) -> nil()
           , mult#1(::(@x, @xs), @b2) ->
             mult#2(::(#abs(#0()), mult(@xs, @b2)), @b2, @x)
           , #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#neg(@x), #0()) -> #0()
           , #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y))
           , #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y))
           , #mult(#pos(@x), #0()) -> #0()
           , #mult(#0(), #neg(@y)) -> #0()
           , #mult(#0(), #pos(@y)) -> #0()
           , #mult(#0(), #0()) -> #0()
           , #succ(#neg(#s(#0()))) -> #0()
           , #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x))
           , #succ(#pos(#s(@x))) -> #pos(#s(#s(@x)))
           , #succ(#0()) -> #pos(#s(#0()))
           , sum#3(#true(), @s) -> tuple#2(#abs(#pos(#s(#0()))), #abs(#0()))
           , sum#3(#false(), @s) -> sum#4(#equal(@s, #pos(#s(#s(#0())))))
           , #div(#neg(@x), #neg(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#neg(@x), #pos(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#neg(@x), #0()) -> #divByZero()
           , #div(#pos(@x), #neg(@y)) -> #neg(#natdiv(@x, @y))
           , #div(#pos(@x), #pos(@y)) -> #pos(#natdiv(@x, @y))
           , #div(#pos(@x), #0()) -> #divByZero()
           , #div(#0(), #neg(@y)) -> #0()
           , #div(#0(), #pos(@y)) -> #0()
           , #div(#0(), #0()) -> #divByZero()
           , add'(@b1, @b2, @r) -> add'#1(@b1, @b2, @r)
           , #abs(#neg(@x)) -> #pos(@x)
           , #abs(#pos(@x)) -> #pos(@x)
           , #abs(#0()) -> #0()
           , #abs(#s(@x)) -> #pos(#s(@x))
           , #pred(#neg(#s(@x))) -> #neg(#s(#s(@x)))
           , #pred(#pos(#s(#0()))) -> #0()
           , #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x))
           , #pred(#0()) -> #neg(#s(#0())) }
         Obligation:
           innermost runtime complexity
         Answer:
           YES(O(1),O(n^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(n^1)).
         
         Strict DPs:
           { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
           , compare#1^#(::(@x, @xs), @b2) ->
             c_22(compare#2^#(@b2, @x, @xs)) }
         Obligation:
           innermost runtime complexity
         Answer:
           YES(O(1),O(n^1))
         
         We use the processor 'matrix interpretation of dimension 1' to
         orient following rules strictly.
         
         DPs:
           { 1: compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , 3: compare#1^#(::(@x, @xs), @b2) ->
                c_22(compare#2^#(@b2, @x, @xs)) }
         
         Sub-proof:
         ----------
           The following argument positions are usable:
             Uargs(c_10) = {1}, Uargs(c_15) = {1}, Uargs(c_22) = {1}
           
           TcT has computed the following constructor-based matrix
           interpretation satisfying not(EDA).
           
                          [::](x1, x2) = [1] x1 + [1] x2 + [1]
                                                              
                   [compare^#](x1, x2) = [4] x1 + [4] x2 + [4]
                                                              
             [compare#2^#](x1, x2, x3) = [4] x1 + [4] x3 + [0]
                                                              
                 [compare#1^#](x1, x2) = [4] x1 + [4] x2 + [1]
                                                              
                            [c_10](x1) = [1] x1 + [2]         
                                                              
                            [c_15](x1) = [1] x1 + [0]         
                                                              
                            [c_22](x1) = [1] x1 + [0]         
           
           The order satisfies the following ordering constraints:
           
                           [compare^#(@b1, @b2)] =  [4] @b1 + [4] @b2 + [4]          
                                                 >  [4] @b1 + [4] @b2 + [3]          
                                                 =  [c_10(compare#1^#(@b1, @b2))]    
                                                                                     
             [compare#2^#(::(@y, @ys), @x, @xs)] =  [4] @y + [4] @xs + [4] @ys + [4] 
                                                 >= [4] @xs + [4] @ys + [4]          
                                                 =  [c_15(compare^#(@xs, @ys))]      
                                                                                     
                 [compare#1^#(::(@x, @xs), @b2)] =  [4] @x + [4] @b2 + [4] @xs + [5] 
                                                 >  [4] @b2 + [4] @xs + [0]          
                                                 =  [c_22(compare#2^#(@b2, @x, @xs))]
                                                                                     
         
         We return to the main proof. Consider the set of all dependency
         pairs
         
         :
           { 1: compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , 2: compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
           , 3: compare#1^#(::(@x, @xs), @b2) ->
                c_22(compare#2^#(@b2, @x, @xs)) }
         
         Processor 'matrix interpretation of dimension 1' induces the
         complexity certificate YES(?,O(n^1)) on application of dependency
         pairs {1,3}. These cover all (indirect) predecessors of dependency
         pairs {1,2,3}, their number of application is equally bounded. The
         dependency pairs are shifted into the weak component.
         
         We are left with following problem, upon which TcT provides the
         certificate YES(O(1),O(1)).
         
         Weak DPs:
           { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
           , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
           , compare#1^#(::(@x, @xs), @b2) ->
             c_22(compare#2^#(@b2, @x, @xs)) }
         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.
         
         { compare^#(@b1, @b2) -> c_10(compare#1^#(@b1, @b2))
         , compare#2^#(::(@y, @ys), @x, @xs) -> c_15(compare^#(@xs, @ys))
         , compare#1^#(::(@x, @xs), @b2) ->
           c_22(compare#2^#(@b2, @x, @xs)) }
         
         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^2))